99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C# agsXmpp接入Openfire生產(chǎn)級(jí)實(shí)踐指南

C# agsXmpp接入Openfire生產(chǎn)級(jí)實(shí)踐指南 簡(jiǎn)介本資源是一個(gè)基于C#的XMPP即時(shí)通訊客戶端Demo面向.NET開發(fā)者及IM協(xié)議學(xué)習(xí)者解決如何使用agsXMPP庫快速連接Openfire服務(wù)器并實(shí)現(xiàn)登錄、收發(fā)消息等核心功能的問題。項(xiàng)目采用WPF框架構(gòu)建含19個(gè)文件8個(gè)C#源碼如IMXmpp.cs、MainWindow.xaml.cs負(fù)責(zé)協(xié)議交互與UI邏輯2個(gè)XAML定義界面布局1個(gè)App.config管理連接配置1個(gè).csproj工程文件及1個(gè).sln解決方案另含agsXMPP.dll依賴庫與多語言資源文件整體壓縮包僅728KB輕量易上手。已有705人學(xué)習(xí)下載適合初學(xué)者理解XMPP通信流程也便于進(jìn)階者參考資源綁定、Message事件監(jiān)聽、SSL連接配置等關(guān)鍵實(shí)踐。代碼結(jié)構(gòu)清晰模塊分離明確——XAML負(fù)責(zé)視圖、ViewModel層封裝業(yè)務(wù)、IMXmpp.cs專注XMPP會(huì)話管理可直接運(yùn)行調(diào)試是掌握C#Openfire即時(shí)通訊開發(fā)的實(shí)用入門范例。1. C# 用 agsXmpp 連 Openfire不是“能連上就行”而是消息不丟、重連不崩、調(diào)試有跡可循的生產(chǎn)級(jí)接入起點(diǎn)你寫了個(gè) C# 客戶端調(diào)XmppClient.Connect()成功了發(fā)條消息對(duì)方也收到了——但第二天測(cè)試時(shí)發(fā)現(xiàn)斷網(wǎng) 30 秒后重連失敗、離線消息收不全、連續(xù)發(fā) 5 條消息只到 2 條、Wireshark 抓包看到一堆stream:features循環(huán)重協(xié)商……這時(shí)候你才意識(shí)到XMPP 不是 HTTPConnect()返回 true 只是握手開始不是通信就緒。這個(gè) agsXmpp Openfire 的 Demo 正是為這類“表面跑通、實(shí)際翻車”的場(chǎng)景而生它不是教你怎么寫第一行new XmppClient()而是把登錄鑒權(quán)、心跳保活、消息 ACK、異常重連、XML 調(diào)試日志這五根骨頭全拆開擺給你看。適合正在做企業(yè)內(nèi)網(wǎng)即時(shí)通訊模塊、IoT 設(shè)備狀態(tài)上報(bào)、或需要嵌入輕量級(jí) XMPP 能力到 WinForms/WPF 應(yīng)用的 C# 開發(fā)者。它不依賴 .NET Core 新特性實(shí)測(cè)兼容 .NET Framework 4.6.1Openfire 版本覆蓋 4.7.x 到 4.8.4最新穩(wěn)定版所有代碼無第三方私有 NuGet純 agsXmpp.dll 原生 System.Xml。2. 為什么選 agsXmpp 而不是 MatriX 或 SharpXMPP從協(xié)議棧深度和調(diào)試可見性講清楚2.1 協(xié)議層控制力你能親手干預(yù)stream:stream的每一個(gè)字節(jié)agsXmpp 是少有的、在 .NET 生態(tài)中仍保留完整 XML 流解析/序列化控制權(quán)的庫。它的XmppClient并非黑匣子封裝而是暴露了OnWriteXml、OnReadXml、OnStreamError等底層事件。這意味著當(dāng) Openfire 返回stream:errorconflict//stream:error時(shí)你不需要猜是賬號(hào)沖突還是資源重復(fù)——直接在OnStreamError里捕獲原始 XML提取conflict/標(biāo)簽并觸發(fā)自定義登出邏輯client.OnStreamError (sender, e) { var errorXml e.ErrorElement.ToString(); // 原始錯(cuò)誤 XML 字符串 if (errorXml.Contains(conflict)) { Log.Warn(賬號(hào)被擠下線執(zhí)行強(qiáng)制登出); client.Close(); // 避免殘留連接 TriggerForceLogout(); } };提示MatriX 庫雖功能更全但其XmppClient內(nèi)部使用異步狀態(tài)機(jī)封裝流處理OnStreamError僅拋出抽象XmppException丟失text中的 Openfire 原生提示如 “Your session has been terminated by another resource”。而 agsXmpp 讓你拿到的是未經(jīng)加工的stream:errorDOM這是排查 Openfire 鑒權(quán)策略、會(huì)話限制、插件攔截等問題的關(guān)鍵“后悔藥”。2.2 調(diào)試友好性日志不是“Connected”或“Disconnected”而是可回溯的 XML 會(huì)話流agsXmpp 的XmppClient.SetXmppLogging()方法支持將雙向 XML 流含時(shí)間戳、方向標(biāo)識(shí)、縮進(jìn)格式輸出到任意TextWriter。這不是簡(jiǎn)單的 DEBUG 日志而是可直接粘貼進(jìn) XML 工具驗(yàn)證的協(xié)議會(huì)話記錄var logWriter new StreamWriter(C:\xmpp_debug.log, true); logWriter.AutoFlush true; client.SetXmppLogging(logWriter, XmppLoggingLevel.Verbose);生成的日志片段如下已脫敏[2024-06-12 14:22:03.102] → stream:stream toopenfire.example.com xmlnsjabber:client xmlns:streamhttp://etherx.jabber.org/streams version1.0 [2024-06-12 14:22:03.105] ← stream:stream fromopenfire.example.com idab12cd34ef56 xmlnsjabber:client xmlns:streamhttp://etherx.jabber.org/streams version1.0 xml:langen [2024-06-12 14:22:03.107] ← stream:featuresstarttls xmlnsurn:ietf:params:xml:ns:xmpp-tls/mechanisms xmlnsurn:ietf:params:xml:ns:xmpp-saslmechanismPLAIN/mechanism/mechanisms/stream:features [2024-06-12 14:22:03.109] → auth xmlnsurn:ietf:params:xml:ns:xmpp-sasl mechanismPLAINAGFkbWluAHBhc3N3b3Jk/auth這種日志讓你能精準(zhǔn)定位問題環(huán)節(jié)是 TLS 協(xié)商失敗SASL 認(rèn)證 Base64 編碼錯(cuò)誤還是 Openfire 的stream:features缺少bind或session對(duì)比之下SharpXMPP 的日志默認(rèn)只輸出高層事件如OnAuthError無法還原協(xié)議交互細(xì)節(jié)。2.3 輕量與可控?zé)o隱式線程、無自動(dòng)重連、無魔法配置agsXmpp 的XmppClient是純粹的單線程事件驅(qū)動(dòng)模型。它不啟動(dòng)后臺(tái)線程池不自動(dòng)重連不讀取 App.config 魔法鍵值。所有行為都由你顯式控制連接client.Connect()同步阻塞直到 TCP 建立或超時(shí)之后立即觸發(fā)OnConnect登錄client.Login()發(fā)起 SASL 認(rèn)證成功后觸發(fā)OnAuth心跳需手動(dòng)調(diào)用client.SendKeepAlive()間隔由你決定Openfire 默認(rèn) 300 秒重連需監(jiān)聽OnClose事件自行實(shí)現(xiàn)退避策略如指數(shù)退避。這種“不省事”的設(shè)計(jì)恰恰是生產(chǎn)環(huán)境最需要的——你知道每一行代碼對(duì)應(yīng)哪個(gè)協(xié)議動(dòng)作沒有隱藏的線程競(jìng)爭(zhēng)沒有不可控的自動(dòng)重連導(dǎo)致 Openfire 會(huì)話數(shù)爆炸。某公司曾因 MatriX 的自動(dòng)重連未設(shè)上限在網(wǎng)絡(luò)抖動(dòng)時(shí) 1 分鐘內(nèi)創(chuàng)建了 200 個(gè)無效會(huì)話觸發(fā) Openfire 的maxSessionsPerUser限制而全局拒絕服務(wù)。3. 登錄與消息收發(fā)從XmppClient初始化到可靠送達(dá)的完整鏈路3.1 初始化與連接繞過 DNS SRV 查找直連 Openfire 端口Openfire 默認(rèn)監(jiān)聽 5222明文和 5223SSL但 agsXmpp 默認(rèn)會(huì)嘗試 DNS SRV 查詢_xmpp-client._tcp.domain這在內(nèi)網(wǎng)無 DNS 或防火墻屏蔽 UDP 53 時(shí)必然失敗。必須顯式禁用并指定 IP端口var client new XmppClient(); client.Server 192.168.1.100; // Openfire 服務(wù)器 IP非域名 client.Port 5222; // 明文端口若啟用 TLS則用 5223 client.UseStartTls false; // 若用 5222必須 false若用 5223設(shè)為 true 并配證書 client.Username user1; client.Password pass123; client.Resource desktop; // 關(guān)鍵Resource 決定會(huì)話唯一性避免 conflict 錯(cuò)誤注意Resource是 XMPP 地址JID的資源部分格式為userdomain/resource。Openfire 默認(rèn)允許同一用戶多端登錄但若resource相同如都填web后登錄者會(huì)踢掉前者觸發(fā)conflict/錯(cuò)誤。生產(chǎn)環(huán)境建議用設(shè)備 ID 或進(jìn)程 ID 生成唯一 resource例如desktop_ Environment.MachineName。3.2 登錄流程SASL PLAIN 認(rèn)證與 Openfire 用戶狀態(tài)同步agsXmpp 默認(rèn)使用 SASL PLAIN 認(rèn)證Openfire 默認(rèn)啟用。認(rèn)證過程分三步每步均可監(jiān)聽// 1. 連接建立后觸發(fā) OnConnect client.OnConnect (sender, e) { Log.Info(TCP 連接已建立開始登錄...); client.Login(); // 主動(dòng)發(fā)起 SASL 認(rèn)證 }; // 2. 認(rèn)證成功后觸發(fā) OnAuth client.OnAuth (sender, e) { Log.Info($登錄成功JID: {client.MyJid}); // 此時(shí)可發(fā)送初始 Presence上線通知 var pres new Presence { Type PresenceType.available }; client.Send(pres); }; // 3. 認(rèn)證失敗觸發(fā) OnAuthError client.OnAuthError (sender, e) { Log.Error($認(rèn)證失敗{e.Exception.Message}); // e.Exception 是 SaslException可獲取具體錯(cuò)誤碼 if (e.Exception is SaslException saslex saslex.ErrorCode not-authorized) { Log.Warn(用戶名或密碼錯(cuò)誤請(qǐng)檢查 Openfire 用戶管理界面); } };關(guān)鍵點(diǎn)OnAuth觸發(fā)不代表用戶已在 Openfire 在線列表可見。Openfire 需收到presence typeavailable/才標(biāo)記用戶在線。因此OnAuth后必須主動(dòng)Send(new Presence())否則其他用戶看不到你。3.3 消息接收從message解析到業(yè)務(wù)邏輯路由agsXmpp 將message元素反序列化為Message對(duì)象但不自動(dòng)解密、不解壓、不校驗(yàn)簽名XMPP 標(biāo)準(zhǔn)本身不強(qiáng)制這些。你需要自己處理Message.Body、Message.From、Message.Toclient.OnMessage (sender, e) { var msg e.Message; Log.Info($收到消息{msg.From} → {msg.To} | {msg.Body}); // 1. 過濾自身發(fā)送的消息避免回聲 if (msg.From.Bare client.MyJid.Bare msg.From.Resource client.MyJid.Resource) return; // 2. 處理不同 message type switch (msg.Type) { case MessageType.chat: HandleChatMessage(msg); break; case MessageType.normal: HandleNormalMessage(msg); break; case MessageType.error: Log.Error($消息錯(cuò)誤{msg.Error?.Code} - {msg.Error?.Text}); break; } }; private void HandleChatMessage(Message msg) { // 示例提取純文本忽略 HTML body string textBody msg.Body ?? ; if (msg.XElements ! null msg.XElements.Count 0) { // 嘗試解析 XEP-0071 XHTML-IM 擴(kuò)展如有 var xhtml msg.XElements.FirstOrDefault(x x.Name html); if (xhtml ! null) { textBody StripHtml(xhtml.ToString()); // 自定義 HTML 清洗 } } // 交給業(yè)務(wù)層處理 BusinessLogic.ProcessIncomingText(msg.From.Bare, textBody); }注意Message.From是完整 JID如user1openfire.example.com/desktopBare屬性返回user1openfire.example.com這是 Openfire 用戶標(biāo)識(shí)的規(guī)范形式。不要用From.ToString()做哈希或存儲(chǔ)應(yīng)統(tǒng)一用Bare。3.4 消息發(fā)送確保送達(dá)的三個(gè)層次發(fā)送、確認(rèn)、回執(zhí)XMPP 本身不保證消息送達(dá)需分層保障層次機(jī)制agsXmpp 支持實(shí)現(xiàn)方式1. 協(xié)議層發(fā)送成功TCP ACK XMPPmessage發(fā)送完成? 原生支持client.Send(msg)返回void但若底層 Socket 異常會(huì)拋IOException2. Openfire 接收確認(rèn)XEP-0184 Message Delivery Receipts?? 需手動(dòng)實(shí)現(xiàn)在Message中添加request xmlnsurn:xmpp:receipts/監(jiān)聽OnMessage回執(zhí)3. 接收方已讀回執(zhí)XEP-0333 Chat Markers? agsXmpp 無內(nèi)置支持需手動(dòng)構(gòu)造markable/和received/元素推薦做法平衡可靠性與復(fù)雜度只實(shí)現(xiàn) XEP-0184public void SendWithReceipt(string toJid, string body) { var msg new Message { To toJid, Body body, Type MessageType.chat }; // 添加送達(dá)回執(zhí)請(qǐng)求 var receiptReq new Element(request, urn:xmpp:receipts); msg.AddChild(receiptReq); client.Send(msg); } // 監(jiān)聽回執(zhí) client.OnMessage (sender, e) { var msg e.Message; if (msg.Received ! null) // XEP-0184 回執(zhí)消息 { Log.Info($消息已送達(dá)ID{msg.Id}, To{msg.To}); // 更新 UI 或數(shù)據(jù)庫狀態(tài) UpdateMessageStatus(msg.Id, DeliveryStatus.Delivered); } };血淚經(jīng)驗(yàn)Openfire 默認(rèn)不啟用 XEP-0184需在 Openfire 管理控制臺(tái) → Server → Server Settings → XMPP → Enable Message Delivery Receipts 勾選。否則客戶端發(fā)了requestOpenfire 直接忽略永不回執(zhí)。4. 避坑指南那些讓開發(fā)者凌晨三點(diǎn)還在抓包的 agsXmpp Openfire 組合問題4.1 現(xiàn)象OnAuthError報(bào)錯(cuò) “The remote certificate is invalid according to the validation procedure”原因使用UseStartTls true連接 5222 端口或UseSsl true連接 5223 端口時(shí)agsXmpp 默認(rèn)校驗(yàn)服務(wù)器證書。而 Openfire 自簽名證書或內(nèi)網(wǎng) CA 證書未被 Windows 信任庫收錄。解決方案 A開發(fā)/測(cè)試全局禁用證書驗(yàn)證僅限內(nèi)網(wǎng)可信環(huán)境ServicePointManager.ServerCertificateValidationCallback (sender, cert, chain, sslPolicyErrors) true;方案 B生產(chǎn)導(dǎo)入 Openfire 證書到 Windows 本地計(jì)算機(jī)受信任根證書頒發(fā)機(jī)構(gòu)或使用X509Certificate2加載證書并傳入XmppClient需修改 agsXmpp 源碼不推薦。4.2 現(xiàn)象登錄成功OnAuth觸發(fā)但OnRosterItem一個(gè)不觸發(fā)聯(lián)系人列表為空原因Openfire 默認(rèn)關(guān)閉“自動(dòng)發(fā)送好友列表”Roster Push。客戶端需主動(dòng)發(fā)送iq typegetquery xmlnsjabber:iq:roster//iq請(qǐng)求。解決在OnAuth后立即請(qǐng)求好友列表client.OnAuth (sender, e) { // ... 登錄成功邏輯 // 主動(dòng)拉取好友列表 var iq new IQ { Type IQType.get }; var query new Element(query, jabber:iq:roster); iq.AddChild(query); client.Send(iq); }; // 監(jiān)聽響應(yīng) client.OnIq (sender, e) { if (e.Iq.Type IQType.result e.Iq.Query ! null e.Iq.Query.Name query e.Iq.Query.Namespace jabber:iq:roster) { ParseRoster(e.Iq.Query); // 自定義解析 roster XML } };4.3 現(xiàn)象發(fā)送消息后OnMessage收不到任何回執(zhí)Wireshark 顯示 Openfire 返回message但無received原因XEP-0184 要求接收方客戶端主動(dòng)聲明支持。需在登錄后發(fā)送presence時(shí)攜帶c xmlnshttp://jabber.org/protocol/caps hashsha-1 nodehttp://www.igniterealtime.org/projects/openfire/ ver...且 Openfire 插件需啟用。解決確認(rèn) Openfire 已安裝并啟用Fastpath或Monitoring Plugin二者均支持 XEP-0184在OnAuth后發(fā)送帶caps的 presencevar pres new Presence { Type PresenceType.available }; var caps new Element(c, http://jabber.org/protocol/caps); caps.SetAttribute(hash, sha-1); caps.SetAttribute(node, http://www.igniterealtime.org/projects/openfire/); caps.SetAttribute(ver, Qg98ZzKjYyUvZmFzdHBhdGg); // 實(shí)際 ver 值需根據(jù)插件版本計(jì)算 pres.AddChild(caps); client.Send(pres);4.4 現(xiàn)象程序運(yùn)行數(shù)小時(shí)后OnClose頻繁觸發(fā)日志顯示 “Socket closed”原因Openfire 默認(rèn)idleTimeout為 300 秒5 分鐘空閑 TCP 連接被服務(wù)器主動(dòng)斷開。agsXmpp 無內(nèi)置心跳連接靜默超時(shí)即斷。解決實(shí)現(xiàn)應(yīng)用層心跳必須在OnAuth后啟動(dòng)private Timer keepAliveTimer; client.OnAuth (sender, e) { // 啟動(dòng)心跳間隔 240 秒小于 Openfire 300 秒超時(shí) keepAliveTimer new Timer(_ client.SendKeepAlive(), null, TimeSpan.FromSeconds(240), TimeSpan.FromSeconds(240)); }; client.OnClose (sender, e) { keepAliveTimer?.Dispose(); keepAliveTimer null; };4.5 現(xiàn)象OnMessage收到消息但msg.Body為空msg.XElements有html子節(jié)點(diǎn)原因發(fā)送方使用富文本如 Pidgin、Spark消息體以 XHTML-IM 格式發(fā)送Body字段留空內(nèi)容全在html中。解決必須解析XElements提取 HTML 文本private string ExtractHtmlText(Element htmlElement) { // 簡(jiǎn)單提取查找 bodyp 文本忽略樣式 var body htmlElement.GetTag(body); if (body ! null) { var p body.GetTag(p); if (p ! null) return p.InnerText; } return htmlElement.InnerText; // 降級(jí)為純文本 }5. Openfire 服務(wù)端關(guān)鍵配置與客戶端行為對(duì)齊讓兩端不互相“猜謎”5.1 Openfire 控制臺(tái)必調(diào)參數(shù)影響 agsXmpp 行為Openfire 的配置項(xiàng)直接決定 agsXmpp 客戶端能否穩(wěn)定工作。以下是在Server → Server Settings → XMPP頁面中必須核對(duì)的 5 項(xiàng)Openfire 配置項(xiàng)默認(rèn)值推薦值對(duì) agsXmpp 的影響操作路徑Allow plaintext authentication over non-encrypted connectionsDisabledEnabled若用 5222 端口必須開啟否則 SASL PLAIN 被拒Server Settings → XMPP → SecurityEnable Message Delivery ReceiptsDisabledEnabled啟用 XEP-0184否則request無響應(yīng)Server Settings → XMPP → Message ReceiptsIdle connection timeout (seconds)300600延長(zhǎng)心跳間隔容錯(cuò)窗口避免頻繁斷連Server Settings → Connection Manager → Idle TimeoutMaximum number of sessions per user1020防止多設(shè)備登錄時(shí)觸發(fā)conflict/Server Settings → Connection Manager → Max SessionsEnable Stream CompressionEnabledDisabledagsXmpp 不支持zlib壓縮開啟會(huì)導(dǎo)致 XML 解析失敗Server Settings → XMPP → Compression提示修改后需重啟 Openfire 服務(wù)配置才生效。不要只點(diǎn)“保存”。5.2 客戶端資源Resource命名規(guī)范避免conflict錯(cuò)誤的硬性規(guī)則Openfire 將userdomain/resource視為唯一會(huì)話。resource不是可選字段而是會(huì)話生命周期的錨點(diǎn)。agsXmpp 的client.Resource必須滿足長(zhǎng)度 ≤ 64 字符Openfire 限制不含空格、/、、、等非法字符區(qū)分大小寫Desktop≠desktop建議包含環(huán)境標(biāo)識(shí)便于問題定位。推薦生成策略C#// 生產(chǎn)環(huán)境機(jī)器名 進(jìn)程ID 時(shí)間戳哈希 string resource $prod_{Environment.MachineName}_{Process.GetCurrentProcess().Id}_{DateTime.Now:HHmmss}; // 開發(fā)環(huán)境用戶名 IDE 標(biāo)識(shí) string resource $dev_{Environment.UserName}_{System.Diagnostics.Debugger.IsAttached ? debug : run}; // 設(shè)置 client.Resource resource.Substring(0, Math.Min(64, resource.Length)); // 截?cái)喾莱L(zhǎng)5.3 消息路由與離線消息理解 Openfire 的defaultOfflineMessageStrategy當(dāng)目標(biāo)用戶離線時(shí)Openfire 如何處理發(fā)給他的消息這由defaultOfflineMessageStrategy參數(shù)控制默認(rèn)為store存儲(chǔ)。但 agsXmpp 客戶端不會(huì)自動(dòng)拉取離線消息需主動(dòng)請(qǐng)求// 登錄成功后主動(dòng)拉取離線消息XEP-0013 private void RequestOfflineMessages() { var iq new IQ { Type IQType.set }; var offline new Element(offline, http://jabber.org/protocol/offline); offline.SetAttribute(fetch, true); // 請(qǐng)求所有離線消息 iq.AddChild(offline); client.Send(iq); } // 監(jiān)聽離線消息響應(yīng)Openfire 返回多個(gè) message 包裹在 offline 中 client.OnIq (sender, e) { if (e.Iq.Type IQType.result e.Iq.Query ! null e.Iq.Query.Name offline e.Iq.Query.Namespace http://jabber.org/protocol/offline) { foreach (Element msgElem in e.Iq.Query.Children) { if (msgElem.Name message) { var offlineMsg Message.LoadXml(msgElem.ToString()); Log.Info($收到離線消息{offlineMsg.From} | {offlineMsg.Body}); // 處理離線消息... } } } };注意Openfire 的離線消息存儲(chǔ)有容量限制默認(rèn) 100 條/用戶且不存儲(chǔ)typeerror或typegroupchat消息。務(wù)必在 Openfire 控制臺(tái) → Server → Offline Messages 中確認(rèn)Max messages per user和Store messages for天數(shù)設(shè)置合理。6. 從 Demo 到生產(chǎn)一個(gè)真實(shí)可用的重連與狀態(tài)恢復(fù)方案6.1 狀態(tài)機(jī)驅(qū)動(dòng)的重連引擎不只是“斷了再連”而是“連前清狀態(tài)、連后補(bǔ)數(shù)據(jù)”XmppClient本身無重連邏輯但生產(chǎn)環(huán)境必須處理網(wǎng)絡(luò)抖動(dòng)、Openfire 重啟、DNS 故障等。我設(shè)計(jì)了一個(gè)基于狀態(tài)機(jī)的重連器核心是分離連接狀態(tài)與業(yè)務(wù)狀態(tài)public enum XmppConnectionState { Disconnected, Connecting, Authenticating, Connected, Reconnecting // 重連中不接受新業(yè)務(wù)請(qǐng)求 } private readonly StateMachineXmppConnectionState _stateMachine; private int _reconnectAttempts; private readonly TimeSpan _baseDelay TimeSpan.FromSeconds(2); public XmppReconnectManager(XmppClient client) { _stateMachine new StateMachineXmppConnectionState(() _currentState, s _currentState s); // 狀態(tài)轉(zhuǎn)換 _stateMachine.Configure(XmppConnectionState.Disconnected) .Permit(Trigger.Connect, XmppConnectionState.Connecting); _stateMachine.Configure(XmppConnectionState.Connecting) .OnEntryAsync(async () await TryConnect()) .PermitIf(Trigger.Connected, XmppConnectionState.Authenticating, () _client.IsConnected) .PermitIf(Trigger.Failed, XmppConnectionState.Disconnected, () _reconnectAttempts 5); _stateMachine.Configure(XmppConnectionState.Authenticating) .OnEntryAsync(async () await TryLogin()) .PermitIf(Trigger.Authenticated, XmppConnectionState.Connected, () _client.IsAuthenticated) .Permit(Trigger.Failed, XmppConnectionState.Reconnecting); _stateMachine.Configure(XmppConnectionState.Reconnecting) .OnEntryFrom(Trigger.Failed, async () { _reconnectAttempts; var delay _baseDelay * (int)Math.Pow(2, _reconnectAttempts); // 指數(shù)退避 await Task.Delay(delay); await _stateMachine.FireAsync(Trigger.Connect); }); }6.2 重連后的狀態(tài)恢復(fù)三步走避免消息黑洞重連成功不等于業(yè)務(wù)就緒。必須按順序恢復(fù)重新注冊(cè)事件監(jiān)聽器OnMessage,OnPresence等重發(fā)未確認(rèn)消息維護(hù)一個(gè)ConcurrentDictionarystring, Message存儲(chǔ)msg.Id→Message重新同步關(guān)鍵狀態(tài)好友列表、群組成員、最后已讀位置。關(guān)鍵代碼消息重發(fā)private ConcurrentDictionarystring, Message _pendingMessages new(); // 發(fā)送時(shí)存入待確認(rèn)隊(duì)列 public void SendMessage(Message msg) { if (string.IsNullOrEmpty(msg.Id)) msg.Id Guid.NewGuid().ToString(); _pendingMessages.TryAdd(msg.Id, msg); _client.Send(msg); } // 收到回執(zhí)時(shí)移除 client.OnMessage (sender, e) { if (e.Message.Received ! null !string.IsNullOrEmpty(e.Message.Received.Id)) { _pendingMessages.TryRemove(e.Message.Received.Id, out _); } }; // 重連成功后遍歷重發(fā)所有 pending 消息 private async Task ResendPendingMessages() { var toResend _pendingMessages.Values.ToList(); _pendingMessages.Clear(); // 清空前先備份 foreach (var msg in toResend) { try { // 重發(fā)前更新時(shí)間戳避免被當(dāng)成重復(fù)消息 msg.Timestamp DateTime.Now; _client.Send(msg); await Task.Delay(100); // 避免洪泛 } catch (Exception ex) { Log.Error($重發(fā)消息失敗 {msg.Id}: {ex.Message}); } } }6.3 最小化 Openfire 日志干擾只記錄真正需要的 traceOpenfire 默認(rèn)日志級(jí)別為INFO但 agsXmpp 調(diào)試需FINEST級(jí)別 XML 流。直接調(diào)高全局日志會(huì)導(dǎo)致磁盤爆滿。正確做法是動(dòng)態(tài)開啟特定包的日志在 Openfire 控制臺(tái) → Server → Logging → Log Level添加PackageLevel說明org.jivesoftware.openfire.nio.NIOConnectionFINEST查看 TCP 連接建立/關(guān)閉org.jivesoftware.openfire.auth.SASLAuthenticationFINEST查看 SASL 認(rèn)證流程org.jivesoftware.openfire.session.LocalClientSessionFINEST查看會(huì)話創(chuàng)建、資源沖突這樣日志文件中只出現(xiàn)關(guān)鍵協(xié)議交互而非海量UserManager或Group的 INFO 日志排查效率提升 5 倍以上。從那以后我每次部署 agsXmpp 客戶端都強(qiáng)制走一遍這三步用 Wireshark 抓包確認(rèn)stream:features是否含urn:xmpp:receipts在 Openfire 日志中搜索SASLAuthentication確認(rèn) PLAIN 認(rèn)證是否成功用另一個(gè)客戶端如 Spark發(fā)一條消息驗(yàn)證OnMessage是否觸發(fā)且Body可讀。漏掉任何一步上線后都可能變成深夜告警。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
六月婷婷操逼| 91色在线/日韩| 涩九九九九| 能看的av| 99热大香蕉| 久99热| 亚洲精品无码久久| 97人人搞| 欧美久久网| 少妇水多A片太爽了| 五月天激情小说网| 色停停五月,在线观看| 情欲综合网| 内射综合网| 香蕉久久五月| 日本波多野结衣视频| 婷婷五月免费观看| 五月丁香综合网色欲| 噜噜狠狠色综合久| 色婷婷久久视屏| 亚洲日比视频| 狠狠色噜噜色狠狠狠综合色| 91人人人人人人人| 艹色18p| 啪啪一区| 五月婷婷深深爱| 五月激情啪啪| 五月天婷婷激情| 殴美激情综合网| 亚洲五月天婷婷| 婷婷深爱五月丁香网| 99 频99热国里只有精品| 久久99精品久久久久久噜噜| 丁香激情网| 久久99看免费| 五月婷在线影院| 日韩高清久久| 色综合久久久久| 99在线观看视频| 五月丁香六月激情综合| 欧美日韩成人在线| 五月丁香六月婷婷色| 思思久久99热| 婷婷综合网伊人| 日本在线视频手机播放五月婷| www色婷婷久久综合久色 | 99色综合| 亚洲午夜在线视频| 91九色熟女| 五月婷婷中文字幕| 97色热| 色5月婷婷色| 婷婷大乡焦噜噜| 97色在线观看视频| 日韩人妻无码专区| 色婷婷成人色网| 国产91资源在线| 国产在线激情视频| 99碰| 99热这里只有精品国产免费| 。久久久久久久久久久久久久人妻| 新激情五月天色播| 五月婷视频在线| 激情婷婷六月天| 99久久www| 99热亚洲| 无码人妻丰满熟妇奶水区码| 欧美熟妇一区二区三区| 欧美熟女99| 91人人爽狠狠狠| 玖玖在线视频福利| 永久AⅤ1| 色五月天婷婷| 五月丁香六月激情| 五月丁香六月婷综合成人综合 | 99啪| sewuyuejiqingwang| SS丁香五月婷婷| 久久色五月天综合网| 噜噜吧天天爱| 婷婷色婷婷| 天天激情站| 色色九区| 五月激情精品视频| 激情综合色婷婷啪啪六月天| 国产毛片欧美毛片久久久| 丁香五月天AV在线 | 色五月天综合| 久久性操| 99re视频在线精品| 91人妻人人操| 色婷婷丁香五月| 99re26视频| 538在线精品| 五月婷婷片| 色综啪啪网| 美女精品一级不卡视频| 久久久精品色色色| 欧美日韩欧美| 99久久99九九九99九他书对| 婷婷六月啪啪| 中文字幕1区2区。| 九九99免费理论| 在线,国产,色,热视频| 婷婷五月天色综合| 99热婷婷| 青青草原亚洲天堂| 激情五月综合婷婷| 人人肏逼视频在线一区二区| 色五月成人婷婷| 26uuu精品一区二区| 97人人草| 亚洲九九夜夜| 91九色丨国产丨爆乳| 韩国婷婷丁香五月| 久久婷婷六月综合综合| 综合色影| 五月天婷婷综合免费| 丁香六月综合激情| 在线色色| 国产三级片91| 久久99精品久久久| 久久机热思思热| 26uuu精品国产| 亚洲久艹| 这里精品| 1024久婷| 亚洲人成人五月天| 91夫妻视频| 91色综合| 碰碰91| 91碰碰视频在线观看| 丁香综合网| 九九婷婷网五月天| 色色丁香五月天社区| 夜夜天天久久婷婷| 亚洲精品久久久久久久久久吃药| 激情五月天黄色小说| 夜夜撸夜夜骑| 婷婷99丁香| 五月色无码| 色啦啦视频| 97超碰在线免费观看| 欧美成人日韩| 婷婷五月色| 色五月情| 人人爽欧美婷婷久久久五月丁香| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 欧洲色| 久久亚洲天堂| 99这里只有精品| 思思久久久婷婷| 丁香社92视频| 99碰碰| 婷婷97狠狠干| 天天插插天天| 亚洲色五月婷婷| 色婷婷基地 | 五月丁香婷婷伊人日韩| 亚洲AV成人在线| 一个色的综合| 久久伦乱| WWW.亚洲无码| 婷婷色中文字幕| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 色色综合色视频| 天天夜天天色天天| 九九精品热| 51精品国自产在线| 五月天丁香成人社| 五月天激情综合10p| 99久久性爱| 婷婷黄色| 中文字幕在线人妻| 综合五月丁香久久| 成人丁香五月天Av| 色五月婷婷777| 色色日本欧美| 久久这里只有国产精品视频| 丁香五月婷婷啪啪| 丁香青青五月天| 大香蕉九九| 亚洲色vA| 婷婷激情五月综合| 中文AV在线播放| 激情综合网激情五月网| 99ri国产在线| 综久久久| ss99热| 久久婷婷六月综合综合| 超极99精品| 伊人网碰碰| 九九久久五月天综合伊人| 婷婷五月天Av| 欧美啪啪网| www。88热在线视频免费观看| 精品人妻一区| 骚逼视频一区2区| 一起草AV| 另类综合激情| 91chinese 在线| 亚洲开心激情网| 99人碰碰碰| 中文字幕高清av| 婷婷五月天中文字幕.| 激情综合丁香五月| 97色精品视频| 激情五月婷婷啪啪| 五月婷婷综合网| 六月婷婷香蕉| 激情第四色| 操日本99| 色色色.com| 五月叮香啪| 综合精品99| 丁香五月在线观看综合| 九九在线视频| 狠狠狠婷婷五月综合| 激情五月天网站| 久久加勤综合| 亚洲精品性色| 婷婷色五月大香蕉在线| 五月色情网| 思思热视频| 成人色图情色成人网 www.5b5b5bcom 五月天| 天天 日综合| 色五月首页| Www.狠狠| 五月天婷婷7米| 99婷五月| 日日撸日日操| 亚洲99热| 这里只有精品视频在线看| 99精品成人无码A片观看金桔| 久久多色| 丁香六月婷婷综合| 综合天天综合| 中文字幕成人| 99热这里只有精品98| 91精品久久久久久综合五月天| 久久激情天堂| av在线免费播放| 日韩在线99| 色婷婷五月天在线观看| 天堂久久婷婷| 婷婷色影院| 五月丁香激情四射| 日日天天干| 成人在线视频网| 五月婷婷激情综合| 18av天堂| 97在线观视频免费观看| 综合五月天婷婷色| 亚洲久艹| 九九re精品视频在线观看| 小色小蛇伊人婷婷色香五月| www狠狠| www.五月婷婷| 六月丁香久久| 久色中文| 国产探花一片区| 国产综合网在线| 一本九九色| 五月婷婷之综合激情| 9热久久在线| 亚洲第一综合| 婷婷丁香六月综合激情站| 色五月欧美| 色婷婷五月天天天天天| 婷婷丁香五月天综合在线日韩| 69er小视频| 2050人人操免费工开爱 | 97久操| 噜噜国产| 99久久婷婷| 五月丁香成人网| 激情无码五月天| 开心五月激情网| 天天碰天天插天天操| 五月停视频天堂| 五月花在线观看视频| 亚洲超级碰| 久久99久久99久久99人受| 婷婷5月色| 97碰碰草| 亚洲中文字幕AV| www.25五月婷婷| 丰满人妻妇伦又伦精品国产| 日日噜噜夜夜狠狠久久丁香五月| 国产成人网| 国产成人精品一区二三区熟女在线| 欧美猛片| 任你擦免费视频| av九九| 五月丁香成人| 久久久久久久久久久97| 激情开心五月天| 五月WWW| 99熟女啪啪视频| 五月色影院| 五月婷婷免费视频| 丁香五月婷婷色情综合| 欧美情色电影一区二区| 色碰碰| 色婷婷丁香五月天在线视频 | 日本操天堂| 丁香五月香蕉| 五月六月丁香婷婷在线观看| 五月天婷婷激情在线色图| 色五月六月| 天天舔天天| 99视频在线观看视频| 久九色| 天天射影视综合网| 五月丁香啪啪网| 九九99精品免费播放| 九九青草热| 日本在线视频手机播放五月婷| 天色色综合网| 极品少妇XXXX精品少妇偷拍| 丁香五月婷婷偷拍| 丁香五月冃欧美| 国产操碰| 任你干嘛免费视频播放| 俺去也五月| 日本色婷婷| 婷婷五月深深的爱| 婷香五月| 在线99色| 亚洲成人电影在线免费观看| 久热无码| 九九九色综合| 成人开心五月天| 色综久久AV| 国内久久久精品99| 丁香五月欧美婷婷| 亚洲精品白浆高清久久久久久| 激情久久久久久久久久久| 激情伊人五月婷婷久久| 狠狠色婷婷| 久啪欧美| 色婷婷AV久久| 激情五月黄色| 色色丁香| 狠狠搞狠狠操| www.婷婷五月| 激情开心五月天| www.com操| 91婷婷在线| 久热天堂| 99热综合在线观看| 第四色在线观看| 在线99热| 丁香花五月天激情| 婷婷色片| 天天日天天舔| 五月丁香六月婷婷姐| 色五月天成人在线| 亚洲综合网激情五月天| 五月天婷基地| 天天做综合| 99九九在线| 久色88| 婷婷情色五月| 亚洲情欲久久| 97超喷视频在线观看| 亚洲日韩乱码一区二区三区四区| 午夜丁香| 99热久久这里只有精品| 亚洲无码色| 欧美久热| 深爱婷婷网| 成人丁香五月| 99热精品中文字幕| 99这里只有精品|v| 99色视频| 大香网伊人久久综合| 五月婷婷啪| 五月婷婷成人| 九九亚洲综合| 色999亚洲人成色| 亚洲无码11| 99综合| 人人摸人人摸| 黄色一级影片| 色色色色色色色色五月先| 综合啪啪| 大香蕉人妻| 超碰在线观看99| 黄网免费观看| 99亚洲精品视频| 天干夜夜操| 99久在线精品99re8热| 深爱激情六月天| 色欲色香综合网| 亚洲人妻AV| 亚洲1区| 精品乱码久久久久| 精品夜夜澡人妻无码AV| 26uuu色五月| 亚洲韩国日产综合AV| 久草婷婷视频| 伊人狠狠丁香婷婷综合尤物| 中文网AV| 99在线国| 综合在线色婷婷| 国产精品视频免费看| www.婷婷六月天| 婷婷五月成人| 无码AV免费精品一区二区三区| 午夜天天精品视频| 日韩婷久| 婷婷久久五月| 五月丁香婷婷激情在线| 日韩在线五月天婷婷| 丁香五月天在线观看| 国产精品国产| 婷婷六月天| 国产黄大片在线观看画质优化| 国产内射婷婷| 欧美性爱一区| 色波激情五月天| 99爱最新免费视频在线观看| 五月婷在线观看| 色啪影院| 色色欧美色色色| 日韩AV成人电影| 亚洲性爱电影| 很很操很很操| 激情综合网五月婷婷| 亚洲九区| 99视频热99| 涩九九九九| 天天综合久久| 亚城区在线| 久久99久久99精品免观看粉嫩| 99热免费观看| AV在线二十六页| 亚洲av免费在线| 97久久香草精品视频| 婷婷丁香五月在线播放| 亚洲最大视频| 人人操大| www.夜夜操.con| 婷婷丁香五月高清| 天天日天天操心| 91成人看| 好吊操这里只有精品| 久久视频在线| 久/久精品99看9| 97丁香视频| 五月天婷婷色在线视频免费观看| 看国产探花操逼三级片| 激情小说五月天| 亚洲九九99精品视频在线播放| 五月天久久网站| 精品国产va久| www久久久久久久97| 中文幕无线码中文字蜜桃| 99热精品网| 亚洲视频在线观看99| 欧美婷婷成人| 国产AV一区二区三区最新精品| 91一道本| 色五月成人在线| 激情床戏| 丁香婷婷久久综合在线| 久久黄色网扯| 五月天成人综合| 五月婷婷色色爱| 久久婷婷五月天懂色| 激情网五月婷婷| 成人在线日韩| 丁香六月婷婷开心婷婷网| 丁香五月婷婷亚洲色图| 色欲婷婷五月天丁香| 欧美69久成人做爰视频| 五月激情丁香五月| 综合99久久天天综合| 日本视频不卡123区| 亚洲美女高潮久久久久久69| 国产成人亚洲综合A∨婷婷| 性无码专区无码| 色综合中文色综合网| 久久视频九九视频| 欧美 日韩 人妻 高清 中文| 农村熟妇高潮精品A片| 91在线视频综合| 婷婷综合五月色播| 极品少妇XXXX精品少妇偷拍| 午夜色婷婷| 午夜丁香婷婷| 伊人大香蕉爱聚| 久热2025无码| 五月丁香六月婷婷啪啪| 色碰碰视频| 丁香五月婷婷视频| 97在线日韩| 成人AV在线网站| www.婷婷五月| 日韩操人| 日本九九九九| 婷婷五月天奸女| 婷婷五月色天| se.久久视频在线观看| 丁香五月人妻熟女| 亚洲视频一区| 岛国资源网| 久久九九国产精品怡红院| 99在线精品视频| 九九热在线观看视频| 91干99| 丁香婷婷啪啪啪| WWW.国产| 97干在线看| 五月成人综合| 超碰A V在线| 天天谢天天操| 日韩精品VIP| 激情网婷婷婷| 在线观看日韩12345区| 五月丁香亚洲五月| 国产做A爰片毛片A片美国| 中文网AV| 成人精品视频99在线观看免费| www.av视频xx999.com| 五月婷婷激情综合网| 色五月丁香五月| 久热大香蕉| 无码人妻激情| 色色色热热热| henhencao国产在线| 99色在线观看| 色婷婷在线综合色播网| 97高清国语自产拍| www国产亚洲色婷婷com| 国产九月婷婷| 丁香五月婷婷视频| 91色色色18| 综合色色网| 怡红院 久久| 9久久精品| 亚洲婷婷丁香五月亚洲| 665566 无码| 99re热视频这里只精品5| 9 大屁股在线视频精品| 美欧成人视频| 五月婷俺去也| 欧美丁香婷婷五月| 99热99精品| 99久久婷婷| 亚洲成人色五月天| 久久久久久久久月丁| 久久免费婷婷视频| 五月丁香婷草| 色色色99| 六月婷婷九月丁香亚洲综合| 色吊丝永久访问网址| 婷色五月天| 久久视屏这里只有久久| 九七色色六月丁香| 丁香美女五月天婷婷| 婷婷久久五月丁香| 免费无码毛片一区二区A片| 婷婷五月天色综合| 另类激情码| 五月天六月色| www.26uuu.com亚洲电影| 综合网网欲色| 激情婷婷五月| 久久人妻在线| 亚洲视频五区| 国外亚洲成AV人片在线观看| 亚亚州久久高潮| 色99日韩| 日日噜噜夜夜狠狠久久丁香五月| 婷婷色综合| 婷婷丁香69精华| 99婷五月| 99无码视频| 操逼在线视频| 激情综合99| 丁香五月AV| 婷婷五月天小说网| 99久久精彩视频。| 天堂网亚洲色图| 激情五月com| 日韩一级网站| 久久久天堂国产精品女人| 天天插AV丝袜中| 无码激情| 婷婷新网址| 成人丁香五月| 色婷婷视频在线| 天天日日夜夜爽| 丁香五月瑟瑟| 天天操夜夜操| 丁香五月天狠狠| 色情·com| yazhochengrenavwang| 婷婷伊人网| 激情五月婷婷综合| 色天天综合色| 一逼色综合| 亚洲欧洲美女在线观| 97干在线视频| 五月婷亚洲精品| 精品五月丁香| 婷婷丁香五月天影院| 欧美成人猛片AAAAAAA| 激情性爱五月| 婷婷五月丁香伊人| 激情五月婷婷网在线观看| 99久久精品国产色欲| 熟女人妻视频| 五月花免费视频| 99自拍视频| 97碰91| 五月丁香六月激情| 97热视频| 五月亭亭开心网| 麻豆123区| 婷色五月| 999精品乱码77777| 久久五月天丁香| 99在线精品免费视频| 91九色丨国产丨爆乳| 丁香五月婷婷色播艳门照| 色欲婷婷夜夜| 成人网址在线观看| 成人在线日韩欧美| 丁香五月激情啪啪啪啪| 噼里啪啦完整版中文在线观看 | 97性视频| 青青草激情网| 日韩人妻操逼视频| 丁香色啪综合| 精品无码av丁香五月激情| 国产精品成人AV在线| 婷婷丁香五月天操逼| 九九视频在线观看视频6| 人妻久久久久久久 | 26uuu国产色| 超碰人人艹| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 91九色国产| 丁香六月| 午夜日日| 伊人五月婷婷国产视频| 超爽内射| 9精品一区| 色五月,com| 精品夜夜澡人妻无码AV| 激情99| 五月丁香六月婷| 天天干夜夜谢| 亚洲色五月婷婷| 东京热伊人| 国产激情AV| 五月停停色色丁香| 日本久热| 亚洲精品电影| 激情五月综合| 丁香五月天啪啪| 精品久久99码| 久操婷婷| 亚洲国产精品VA在线看黑人| 亚洲色无码A片一区二区麻豆| 欧美交换配乱吟粗大25P| 丁香五月影院| 欧美槡BBBB槡BBB少妇| 免费观看全黄做爰的视频| 国产精品天天狠天天看| 国产精产国品一二三在观看| 丁香久久在线| www.9色色色| 婷婷五月欧美| 欧美天天搞| 九九这里是免费的视频5| WWW.婷婷五月天.COM| 久9久9热久热| 思思视频久久| 五月丁香在线国产 | 日本人妻伦在线中文字幕| 午夜69成人做爰视频| 五月丁香婷婷成人网| 天天干天天日蜜臀av| 亚洲成人av中文| 天综合日日夜综合7799| 色五月五月婷婷| 成人av免费观看| 蜜臀A∨在线水帘洞| xxx综合在线| www.射伊蕉婷婷| 伊人久久大香网| 九九人妻福利| 婷婷涩五月天综合| 五月婷婷色五月| AV在线大香蕉| 久久曰曰| 大香蕉丁香五月| 久婷首页| 九九视频免费| 天天日天天做天天操| 色99在线视频| 狠狠色婷婷7777久| 玖玖综合色| av在线资源| 六月婷五月丁香| 色五月综合激情| 天天爱天天狠天天透| 婷婷伊人五月天| 国产偷人爽久久久久久老妇APP| 日本97人人| 婷婷成人综合| 天天射射夜| 日日干天天| 中文av网| 九九中文色色| 五月婷婷激情综合| 久久久精久人妻| 五月丁香色婷婷色| 色婷婷成人做爰A片免费看网站 | 五月天偷拍| AA丁香综合激情| 九月婷婷综合色干| 九九色热| 99在线精品视频免费观看20| 婷婷激情四射| 婷婷福利影院| 91操操| 五月天社区狠狠| 五月天婷婷基地| 色婷婷很很丝袜| 久久婷丁香五月| 丁香六月毛片| 高清视频一区| 在线免费视频caop| 噜噜色天天开心| 午夜激情五月天| 色激情五月天| 色综合香蕉视频| 五月婷婷综合激情| 婷婷射图| 婷婷热色| 99热这里只有精品国产免费| 五月婷婷激情网| 人妻丰满精品一区二区A片| 婷婷久久伊人| 五月婷六月天| 五月天综合色| 黄久久久| dingxiangtingtingliuyue| 色婷婷亚洲精品天天综| 欧美激情久| 9久热这里只有精品视频| 97资源碰碰| 亚洲色区17| 五月天激情在线视频| 26UUU欧美激情一区二区| 国产99久| 欧美激情xxxXX| 六月婷婷激情| 久久天堂加勒比| 色婷婷丁香中文在线播放| 97 A I色色| 99九精品| 久久激情五月网| 国产这里只有精品| 久久曰曰| 久久在线大香蕉| 97操碰免费视频| 婷婷深爱色五月| 五月天播播| 亚州操操| 天天操综合网| 婷婷丁香五月天操逼| 五月五丁香婷婷| 97色色网| 99爱视频精品| 97干97色| 五月丁香综合激情网| 国产五月天欧美色| 第九色区AV在线| 五月丁香在线婷婷蜜桃| AV九九| 天天做天天爱高潮片| 日韩成人AV在线播放| 秋霞av不能| 天天爽天天干天天| 色婷婷激情Av久久久| 色婷婷丁香五月在线| 国内外色色色色色成人视频| 久色网址| 1024国产| 9l视频自拍九色9l视频自拍九色9l社区 | 人妻精品久久久久久| 中文字幕无码人妻少妇免费视频 | 、激情六月天| 欧美丁香婷婷五月| 综合激情五月天| 色婷婷丁香| 综合另类视频| 九九热中文| 色热久| 激情久久五月天| 欧美日韩123| 91丨九色丨熟女| 9操在线| 黄网在线免费观看| 天天肏夜夜肏| 亚洲激情婷婷| 亚洲综合视频天天精品| 欧美性爱五月天| 五月天天丁香婷婷在线中| 丁香五月手机在线| www。狠狠干。com| 俺也去色| 啪啪啪五月天| 日比视频91| 天天插天天操| 97超级碰碰碰| 五月丁香操婷逼| 成人午夜无码视频| 另类图片五月天| 成人色站,在线视频,看片-SS1AV| 专区无日本视频高清8| 99色丁香婷婷综合网| www,婷婷,com| 看久久性爱99视频| 色99在线看| 国产免费AV网站| 色噜噜狠狠色综合无码久久欧美| 中文字幕在线免费观看视频| 深爱五月中文字幕| 在线超碰免费| 五月婷婷婷丁香播| 91九色视频| 大香蕉啪啪啪| 丁香五月 六月婷婷首页| www.久久久久久久久久.com| 色婷婷亚洲婷婷在线观看| 久草视频一,二三四| 开心激情网五月天| 草AV9999| 亚洲国产网站| www.久久久久| 亚洲综合网激情五月天| 欧美日本不卡黄色片| 播播网色播播| 99热思思久| 丁香五月花| 婷婷五月天黄色小说| 日本一毛片| 99在线精品观看99| 色色综合视频| 9热精品| 日本99久久| 久久激情五月网| 大香蕉免费9| 99九九久久| 九九热精品6| 色情丁香五月婷婷精品| 最近中文字幕大全免费版在线| 婷婷五月综合视频| 色综合大香蕉| 国产精品扒开腿做爽爽爽A片唱戏| 韩国三级五月天婷婷。| 亚洲操精品| 久久久国产精品黄毛片| 色99在线观看| 干亚洲天堂| 精品导航在线x不卡| 色色色9| 久久亚洲婷婷| 婷婷五月大香蕉| 三十熟女| www.91九色| 五月丁香六月婷婷免费视频| 色欧美影院| 久久在线视频免费观看| 超碰人人干| 激情亚洲五月| 婷婷五月天Av| 色五月婷婷7777| 在线婷婷| 婷婷综合色播网| 狠狠搞五月天| 亚洲免费电影2| 五月丁香色情| 激情婷婷五月天| 天天色五月| 9人人操人人看| 色综合综合综合| 五月丁香婷婷综合| 五月婷婷AV| 亚洲色色图片| 色99自拍| 97涩婷婷婷婷基地| 国产成人+综合亚洲+天堂| 婷婷五月六| 人色五月天婷婷| 婷婷丁香97| 色婷婷aV四虎| 免费看欧美成人A片无码| 综合久久高清| 色五月综合激情| 成人片久久网站| 在线观看亚洲视频影院| 99在线资源视频| 久久婷婷色| 国产精品日日躁夜夜躁| 欧美草久久五月天91| tingtingjiqingwuyue| 久久久久久久8| 91色五月在线观看| 99热久| 亚洲视频五区| 婷婷狠狠干| 狠狠操天天日| 久久久久久久综合狠狠综合| 丁香五月最新地址| 丁香婷婷久久综合在线| 超pen个人视频97| 婷婷综合激情| 亚洲成人高清在线| 国产在这里只有精品| 五月婷婷丁香av| 丁香 婷婷五月| 婷婷五月激情综合| 97热在线精品| 九九九九中文字幕| 五月婷婷久草| 无码免费人妻A片AAA毛片西瓜| 97色色综合| 色色五月天丁香| 五月亭亭开心网| 久久人妻www| 色区域网站视频| 另类图片 五月激情| 思思色播| 成片免费观看视频大全| 婷婷九月亚洲| 色色五月天婷婷丁香| 婷婷五月色花丁香社区| 99色嘟嘟精品网站| 欧美日本韩国亚洲| 婷婷色在线| 97色色视频| 九九精品热| 玖玖色综合| 久久婷婷色| 成人在线不卡| 六月99天天婷婷激情综合| 激情丁香五月婷婷| 99热这里只| 欧美人妻一区二区| 天天干天天射色综合| 伍月婷婷六月丁香| 色六月天| 五月丁香花激情综合网| 婷婷五月噜噜| 五月天基地| www.av骚货| 影音先锋人妻出差| 五月婷婷激情综合拍| 丁香六月亚洲综合| 婷婷色情五月| 51avj视频大全| 婷婷五月六月| 性色天| 在线观看av网站| 五月丁香啪啪婷婷| 亚洲国产成人在线| 九九99在线免费在线观看视频| 欧美熟女99| 五月婷婷激情久久| 五月天久久婷婷| 操一区| 乱岳熟女50岁| 五月婷婷亚洲天堂97色婷婷| 久久3级片| WWW.久久久久久久久久久久久| 伊人综合婷婷| 91色综合网| 婷婷久久综合久| 久久婷婷丁香五月一二三| 五月婷婷色丁香| 久久九九大香蕉电院| 日韩AV大全| www.9797国产| 91丨九色丨东北熟女| 色婷视频| 日韩在线观看网址| 婷婷狠狠爱| 五月丁香黄色| 天天搞夜夜爽夜夜爽| 天干天天干天天天天天| 狠狠干五码| 99精品热| 丝袜大香蕉| 99视频只有精品| 丁香六月在线综合| 中文字幕五月久久婷婷| 亚洲在线操| 99热在这里只有免费精品| 丁香五月天欧美在线| 国产日韩欧美| 99热大香蕉| 五月天激情小说网| 无毒黄色网址| 色情五月天丁香社区| 色热久资源| 色五月婷激情| 热99在线精品| www.99在线| 人妻有码乱操| 婷婷97碰碰| 99热99热在线观看| 婷婷六月激情综合| 久久99精品九九久久久婷婷| 夜精品无码A片一区二区蜜桃| 东北熟女高潮99综合99| 99 re视频一区| 南京搡BBBB搡BBBB| 五月天色丁香| 久久久久er热| 九月丁香网婷婷| 久久香蕉福利| 色青青视频| 天天日天天爽| 中文激情网| 婷婷五月超碰| 婷婷五月天国产精品| 婷婷丁香五月,狠狠综合| www,色婷婷| 国产在线aaa片一区二区99| 99久久五月天| sisi热国产| 五月婷婷视频在线观看| 狠狠综合网| 狠狠综合久久综合| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 日韩色五月| 99热精品在这里| 成人五月天。COM| 色情婷婷| 久久婷婷成人综合色怡春院| 夜夜干天天操| 日本情色一区二区| 五月丁香激情五月天| 思思久久精品| 欧美成人精品三区综合A片| 激情亭亭五月| 色五月婷婷丁香婷婷| 色玖玖综合网| 91在线资源| 深爱五月激情综合| 色婷婷丁香五月| 玩熟女五十AV一二三区| 国产激情AV| 色色网站免费| 少妇AB又爽又紧无码网站 | 成人精品在线观看| 91精品国产日韩91久久久久久国模| 情情五月天色| 亚洲中文字幕网| 丁香五月婷婷少妇| www.激情五月天.com| 啪色综合| 色操综合| 欧美婷婷五月激情| 爱射综合| 婷婷五月丁香A∨| 亚洲综合干| 97 A I色色| 久9精品| 激情五月www| www久久99| 激情六月丁香| 亚洲精品大片| 综合久久婷婷99| 热久久思思热思思| 亚洲中文字幕av| 亚洲视频无| 五月综合六月婷婷| 精品无码久久久久久久久| A片一曲| 天天在线XXX| www.色欲丁香婷婷| 色婷婷伦理| 午夜色婷婷| 日本三级日本三级三级人妇四虎| 99热6精品| 五月四色激情| 天天干天天日日| 色婷婷导航| 妇激情基地| 97操碰视频| a色婷婷| 99精在线| 五月丁香婷婷狠狠操| 婷婷成人五月天一区| 亚洲五月婷婷| 久久五月婷婷电影| 99人人干| 好看的国产精品| 国产婷婷综合在线免费视频| 99色视| 狠狠色综合精品视频在线| 欧美A片在线视频免费观看| 婷婷永久在线| 欧洲色区| ...婷婷国产成人亚洲日韩| 99热只有| 五月婷婷深深的爱| 亚洲成人五月天| 日韩黄黄| 91久久久久久久| 久久性爱视频| 97香蕉碰碰人妻国产欧美| 手机在线日韩视频中文字幕| h在线看免费版在线看| 丁香五月天婷婷91| 激情六月丁| 国产AV不卡福利| 五月色综合| 激情爱爱网站超大免费| 日亚二欧美| www.色综合.com| 玖玖爱资源站| 色婷婷亚洲| 婷婷啪啪| 超碰三级秋霞| www.夜夜操| 激情图片婷婷| 激情婷婷丁香| 丁香婷在线| 99re视频在线精品| 夜夜操夜夜操| 国产综合婷婷| 日韩九区| 五月激情日本在线| 国产成人片| er99免费视频在线| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | www.天天干.com| 亚洲精品字幕在线观看| 五月天婷婷网站| 色色综合网www| 天天碰夜夜爽| 99久精品| www.99在线| 爱之国产色情综合| 九九9久九9国产视频| 99免费视频在线观看爱| 日本九九九九九九| 五月丁香六月色| 99热超碰在线| 亚洲精品久久久久AV无码| 开心五月婷婷在线| 在线综合91| 亚洲在线资源| 激情婷婷内射| 春色激情| 99激情视频| 超碰人人在线| 婷婷97狠狠成人网站| 五月婷婷五月天亚洲无码| 97婷婷在线视频| 五月综合久久| 五月丁香六月激情狠狠| 久9热插入| 五月丁香婷婷色色色| 婷婷丁香六月五月天| 日本欧美成人片AAAA| 婷婷射丁香| 91人妻人人做人碰人人爽九色| 任你草| 久热播这里只有精品| 91好好热日本在线| 色综合色色| 热的无码综合视频| 99人人精品| 五月丁香六月婷| 丁香五月天的网址。| 日本高清久| 少妇大叫太大太粗太爽了A片| 五月天狠狠草| 色一情一乱一乱一区91| 午夜成人片400| 亭亭五月丁香五月天激情| 丁香五月色情| 百度一下国产精品A| 久久多色| 精品色色网| 超碰在线超碰| 丰满少妇猛烈A片免费看观看| 五月婷婷丁香俺日污视频| 99色天堂| 天天综合网~91| 任你爽免费视频| 俺去也在线官网| 人人综合久| 99热国品| 五月丁香啪综合| 人人摸人人射| 婷婷综合亚洲| 超碰在线网站9| 99热这里只有精品1025| 丁香五月综合在线播放 | 9久精品视频| 俺去也在线视频| 丁香婷婷性爱| 婷婷酒色网| 五月天激情网图片| 玖玖热视频| 色五月丁香五月五月婷婷| 色五月婷婷天堂| 专区无日本视频高清8| 成人免费高清在线播放| 97色伦另类图片小说视频 | 狠狠干综合网| 中文字幕婷婷9月天| 婷婷五月天av| 五月天婷婷爱| 六月婷婷视频| 97人人操| 五月丁香亚州综合网| 婷婷中文字幕| 色婷婷综合影院| 亚洲、热| 99热只有精品在线播放| 操人视频91| 丁香婷婷成年| 丁香五月在线播放| 五月婷婷深深爱| 婷婷丁香五月天狠狠| 操操碰| 超碰免费成人| 色欲色香,www,com| 亚洲国产精品二二三三区| 欧美视频五区| 久久少妇视频| 亚洲熟妇AV综合网五月丁香伊人| 991国产精选视频在线播放下载| 182无码| 丁香激情五月| WWW久久久| 激情婷婷六月天| 天天夜天天色天天| 五月婷婷伦理| 五月丁香六月香香蕉| 大胆伊人久久| 国产免费一区二区三州老师F1……| 激情av| 大香蕉九九| 五月婷婷成人| 五月婷亚洲精品| 五月丁香六月情亚洲| ...婷婷国产成人亚洲日韩| 夜夜爽天天干| 日本久热| 日本久久人| 久久五月天婷婷| 狠狠搞亚洲|