免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
天天爽,天天操。| 亚洲激情.com| 97色图片中文字幕视频在线观看| 色综久久AV| 欧洲MV日韩MV国产| 五月丁香婷婷六月| 丁香五月天综合| 啪啪啪大香蕉| 日本久久人| 丁香婷婷基地| 久久九九爽| 婷婷六月色播| 天天射综合网夜夜操| 色婷婷婷婷| 色爱爱综合网| 91人人人人人人人| 91精选国| 五月婷婷久久爱| 极品人妻VideOssS人妻| 丁香五月婷婷色| 婷婷五月天欧美| 一个色的综合| 丁香六月天婷婷色| 国产淫熟妇| 99热乎| 欧美日韩五月婷婷| av线电影| 久久香蕉福利| 自拍偷窥99热| 国产伦理精品高清在线观看网站一区二区 | 色99在线观看| 991精品在线视频| 婷婷五月综合色中文字幕| 人妻久久久久久| 中文字幕在线资源| 五月天婷婷色| 久久久18| 无码人妻少妇色欲AV一区二区| 丁香六月婷婷| 日本三级大片| 艹B高清无码| AA丁香综合激情| 日本片日本片祼观看网站在线看中文版网页在线看 | 激情五月婷婷网| 人妻久热| 五月婷婷婷婷| 99热这里有精品| 五月天天天色| 牛色色碰| 婷婷五月激情五月丁香五月| 中文字幕97超级碰| 欧美婷婷| 亚洲 无码 中文字幕 中出| 久久这里都是精品免费| 婷婷色丁香五月| 天天操,天天插| 婷婷在线操| 婷婷色五月综合| 国产亚洲在线| 97成人在线视频| 涩丁香91| 大香蕉久久久| 六月色日韩| 综合亚洲色色| 国产成人va在线| 五月丁香AV在线| 亚洲综合婷婷六月丁香五月| 色播五月综合网| 天堂综合久| 欧美啪啪9| 婷婷大乡焦噜噜| 99在线免费视频| 91久久| 99爱精品| 特黄三级又爽又粗又大| 91热在线| 思思热久久婷婷五月天| 色婷婷激情| 五月天天天色| 91在线资源| 久re在线| 色噜噜伊人| 日日夜夜噜噜爽爽| 999婷婷综合| 五月网激情| 婷婷五六日| 丁香婷婷色五月合集| 可以看的AV网站| 黄色片区子| www.婷婷六月天| 艹B高清无码| 亚洲av无码影院| 久9久9热久热| 五月深爱激情网| 久热AA| 天天爽夜夜操| 色5月婷婷色| 亚洲色五月天是什么| 性生活视频98791| 九色七七| 五月天婷婷激情六月久久| 五月天丁香婷婷社区| 久久久999精品| 五月婷婷伊人久久| 色五月天综合网| 日本黄色三级片内射| 亚洲AV永久无码影院黑人 | 99热免费| www.婷婷com| 六月婷婷色色色| 国产成人一区二区三区在线观看| 九九色大香蕉| 涩婷婷五月天| 万月丁香狠狠爱| 亚洲无码播放| 伊人婷婷五月天| 国产精产国品一二三在观看| 六月丁香婷| 婷婷五月天综合小说网| 国产69久久久欧美黑人A片| 久久久久久18| 麻豆五月丁香婷婷| 色五月激情五月| 九九性爱网| 日本在线视频手机播放五月婷| 天天爱综合网| 高清 码 免费看片短视频| www激情网| 丁香五月婷婷啪啪| 在线网黄| 99热这里只有精品1025| 99在线热视频| 天天狠狠干| 色婷婷成人| 另类视在线| 激情五月www| 色综合天天| 99色久| 欧洲亚洲激情五月天在线| 免费AV播放| 午夜av网| 野战毛片三一3| 777影视理论片大全在线观看| AV在线免费播放| 九九久久网| 亚洲乱码日产精品BD| 色碰碰视频| 亚洲激情五月| 六月丁香狠狠爱| 五月婷婷之美女图片| 五月丁香成人网| 99操无码视频观看| 99这里有精品视频| 成人电影一区| 99视频| 狠狠久久婷五月| 99综合| 色吧网综合| 夜夜天天久久婷婷| 日韩在线观看网址| 欧美狠狠地| 久久精品A片777777| 久这里只有精品99| 天天爽天天| 无码一区二区日韩| 男男野外做爰全过程69| 婷婷五月天亚洲综合网| 九九精品系列| 91人人网| 亚洲精99| 99色综合久久| 婷婷色综合| 丁香五月综合无码趴趴| www色婷婷| 青青草tp| 久久视频在线视频| 色播五月丁香| 久久性刺激| av在线免费网站| 五月丁香久久综合色| 五月婷婷五月丁香| 丁香婷婷啪啪| 最近中文字幕2019视频1| 99热在这里只有免费精品| 激情五月综合| 五月婷婷开心丁香| 99色五月| 91五月天| 99久久玖玖| 天堂亚洲 在线| 日熟女| 丁香六月婷婷综合激情欧美| 天天日夜夜| 丁香伊人激情| 日本天堂免费99| 久久性刺激| 91色五月| 婷婷五月色播天| 久久久性爱视频| 99久久五月天| 丁香六月婷婷综合| 日日综合网| 色色丁香五月天| 99热免费| 九九热最新视频| 丁香婷婷九月| 亚洲精品国产A久久久久久| 激情五月婷婷丁香综合网| 久九九热| 噼里啪啦完整版中文在线观看| 天天干天天操天天爱| 五月婷婷色色网址| 无码人妻精品一区二区蜜桃色欲| 伊人五月综合网| 五月丁香六月婷| 99精品视频在线观看| 亚洲第一精品网站| 欧美成性色| 性爱激情综合网| www.99精品在线| 婷婷六月丁香在线| 丁香婷婷性久久| 天天日天天爽夜夜爽| 26uuu美女三级视频| 人与禽A片啪啪| 日本五月婷| 1024人妻| 欧美日韩国产一区二区| 精品一二三区久久AAA片| 狠狠干综合网| 五月丁香婷婷AV天堂| 日本在线观看91| 思思热99热| 激情婷婷护士激情| 97精品人人A片免费看| 五月婷婷丁香网| 99re思思| 综激情网| 婷婷丁香五月天在线| 亚洲操逼片| 一起操 91N.com| AVDV久久| 色哟哟精品| 最新亚洲色色网| 五月婷婷影| 色欧美色色色| 综合网色| 丁香五月Av| 五月丁香六月成人| 青青草原99热| 丁香五月婷婷六月婷| 一月婷婷色色| 天堂久久大香蕉| 做爰丰满少妇1313| 激情五月天视频| 婷婷五月色情| 久久视频这里有精品99| 久久久区区一久久久久久| 久综合| 99九九这里有免费视频| 九八Av| 天天爽夜夜操| 开心五月婷婷| 国产在这里只有精品| 久久丁香五月| 天天狠狠夜夜狠狠2023| 1010日日无码| yazhouzonghesese| 怡红院院久久| 丁香五月激情六月| 六月色婷婷欧美| 9久久精品| 亚洲综合另类| 亚洲综合999| www.91AV.com| 夫妻超碰在线| 丁香五月123| 丁香六月综合| 五月丁香综合网| 666555。COm毛片| 久久久com| 99热在这里只有精品| 91精品在线看| 九九激情| 五月婷婷六月激情| AA片在线观看视频在线播放 | 色久五月| 色婷婷色五月综合| 99热国产在线| 亚洲五月停停| 日本色99| 色播五月天激情| 99欧美| 天天操加勒比| 久热无码| 精品夜夜澡人妻无码AV| 爱99干99| 超碰成人在线免费观看| 9伊人网| 97五月婷婷| 婷婷五月综合色中文字幕| 月色色综合婷婷网| 亚洲无线视频| 伊人五月天男人的天堂在线| 色婷婷成人影片| 精品色情一区二区三区四区| 婷婷天天综合| 噜噜吧天天爱| 人妻无码精品一区| 国产FREESEXVIDEOS性中国| 蜜桃人妻无码AV天堂三区| 色偷偷AV亚洲男人的天堂| 日韩国产在线精品| 激情久久网| 爆乳熟女一区二区三区爆乳| 久久激情视频| 久久人妻情侣| 深爱五月天| 大香蕉五月天| 精品国产一区二区三区四区阿崩| 激情五月天婷婷色色色色色色色色色色色 | 激情四射五月天| 天搞天天天天天| 99小精品| 99久热这里只有精品| 色五月成人| 97av在线视频| www.色多多婷| 人伦30P| 五月婷五月婷伊人伊人五月婷| 五月婷婷开心激情六月蜜桃| 夜夜干天天操| 少妇人妻人伦A片| 婷婷丁香18| 99噜噜噜| 深爱激情九九五月天 | 99九九精品| 丁香六月婷婷基地| www九九| 激情婷婷五月天伊人在线观看| 日本 @ va 免费| 久热免费视频| 人妻熟人中文字幕一区二区| 国产成人AV在线播放| 亚洲婷婷五月天综合| 99热大片| 色综合激情| 五月婷婷影视| 丁香六月综合激情| 99免费热视频在线| 欧美黑人巨大性生话| 97婷婷久久丁香| 婷婷五月综合激情| 天天操人人干| 四川BBB搡BBB爽爽视频| 婷婷涩五月| 在线A色| 爱操人妻| 婷婷久久女人| 这里只有精品在线播放| 色色色色五月| 2015WWW永久免费观看播放| 五月天婷亚洲天综合网综合| 丁香久月| 亚洲另类AV| 五月婷婷五月丁香综合| 天天操无码| 热99玖玖99玖玖99九九| 综合在线网| 丁香五月天婷婷中文字幕| 99久在线精品99re8热| 停停综合色色| 激情开心五月天婷婷基地丁香社区| 人人操五月天| AV在线免费播放| 五月天婷婷无码视频| 久/久精品99看9| www.99热在线| 综合久久99| 久热在线中文字幕色999舞| 操日视频| 天天干天天拍| 久久婷婷视频| 九色综合网| 国产亚洲99| www.99日本| 久久丁香婷婷色情综合| 99精品7| 婷婷久热| 99re熱| 人妻激情综合| 色婷婷狠| 8区视频在线| 日日噜噜久久婷婷五月天| 久久99久久99精品免视看婷婷| 九色PORNY9l原创自拍| 色情开心五月| 色欲午夜无码久久久久久张津瑜| 91传媒无码人妻精| 一起草性爱不卡视频| 精品人妻在线免费观看| 五月丁香网中文字幕| 日本九九九九| 国语对白性爱视频播放| 久9热| 99小视频在线| 久久久婷| 9久热这里只有精品视频| 国产激情久久久| site:901-07.com| 国产亚洲99久久精品| 欧美日韩国产伦精品日韩人妻一| 色婷婷五月在线| 九色 在线| 噜噜狠狠色综合久| 99久久九九| 伊人五月天综合网| 激情五月综合网| 色五月丁香五月五月婷婷| 五月激情六月综合| 天天爽—爽| 99这里有精品视频| 蜜桃五月天色| 日本WWW九九九| 天天色粽合合合合合合合| 无码动漫AV| 色综合色| 久久久久9999| 亚洲色五月| 五月丁香直播| 996黄色片| 青青草成人网| 日本久热| 国产成人精品一区二三区熟女在线| 天天人人天天爽| 思思re最新视频| 国产成人+亚洲+欧洲| 婷婷 丁香 久久| 综激情网| 日韩无码人妻一区二区三区综合| 丁香深五月婷婷| 激情五月婷| 激情久久五月天| 97干在线| 五月婷婷免费看| 久久综合影院| 九九热精品视频在线观看| 五月丁婷婷| 玖玖玖婷婷婷| 六月婷婷五月天| 狠狠狠激情网| 欧美激情中文字幕| 国产暴力强伦轩1区二区小说| 久久精品永久免费| 91精品91久久久中77777久久玖玖九九| 91热爆在线| 丁香五色月婷婷网| 五月婷婷丁香大香蕉| 91婷婷色五月| 综合色综合| 在线视频另类| 日日操日日射| 久久人人看| 一级AV片| 在线婷婷| 激情五月深爱婷婷| 久久久久久久丁香五月天婷婷| 日韩黄在免| 成人视频在线免费播放| 日日射天天射| 另类图片色五月| 久久久久久久11111111111| 色99在线观看| 天天操天天爽天天爱| 99久久精彩视频| 亚洲色婷婷| 色婷婷www| 国产色丁香| 日本97久久久精品| 丰满少妇乱A片无码| 九九激情| 丁香五月在线视频黑人| 五月丁香久久| 色婷六月| 亚洲一二三网| 99色在线| 91日本在线观看| 日日操日日爽| 婷婷五月天在线观看av| 激情五婷网| 国产精品男人AV不卡| 欧美人妻一区二区| 婷婷色在线视频| 麻豆五月丁香婷婷| 永久99免费视频网站| 91无码高清| 日韩在线婷婷五月天综合| 婷婷丁香社区网| 久久婷婷资源| 色婷婷影视99| 成人五月天综合网| 亚洲亚洲人成综合网络| 婷婷五月天久久| 久久五月天网| 这里只有精品1| 五月丁香网站在线播放| 色五月天天在线观看资源站| 97资源欧美日韩大香蕉超碰一区| 色婷亚洲五月丁香| av一区二区电影免费在线观看| 国产超碰在线| 夜夜操狠狠操| 欧美99热| 日韩啪啪网| 97久久久| AAA久久| 91狠狠色色丁香婷婷综合久久| 婷婷五月天成人综合网| 99精品网站| 天天婷婷天天| 五月色丁香国产在线视频| 六月婷婷网| 婷婷五月天成人网| 久久曰曰| 天天综合情| 久热综合| 婷婷五月激情的图片| 激情五月综合网最新| 婷婷内射视频在线| AV在线免费播放| 久热99热| 大香蕉精品视频| 大香蕉99热| 影音先锋91| 六月婷欧美| 五月丁香综合激情网| 91久久久久久久久久久| 丁香五月在线| 精品一区二区三区免费毛片爱| 99热这里只有精| 天天操天天干天天日| 99久热这里只有精品| 婷婷啪啪| 俺也去色| 综合另类激情| 噜噜狠狠色综合久| www.久久久久久久| 99色综合网| xxxx五月激情| 思思热性操| 丁香婷婷色五月合集| 五月婷婷久| 79精品视频在线观看,| 日婷婷| 99热99极品观看| 大香蕉精品视频| 色丁香五月婷婷| 亚洲第一成人无码A片| 亚洲六月综合激情久久下卡| 亚洲AV电影美洲AV电影| 99在线免费视频| 99久久精| 激情美女五月天激情在线| 丁香五月激情视频| 婷婷99狠狠躁天天躁中| 色五月婷婷网| 99热香港| 9999三级片| 五月天伊人av| 激情五婷网| 丁香五月AV| 国产激情综合五月久久| 91碰免费视频| 久久婷婷色情7777网站| 丁香五月天在线直播观看| 婷婷五月天电影在线| 美国十月色婷婷在线观看| 五月色婷婷综合| 成人做爰A片免费看视频 | 日本人妻操| 妇激情基地| 亚洲激情视频网| 久久99热这里只有精品| 99成人在线观看| Www.激情| 超碰99在线| 91夫妻网站九色| 亚洲网站999| 插插干干干色| WWW,五月| 国产av一区二区三区| 天天综合五月| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 色色综合网站| 五月丁香亚洲婷婷| 99在线精品观看99| 97久久久免费福利网址| 久久五月人人摸| 五月丁香亭亭| 国产午夜精品一区二区三区四区| 日熟女| 色综合五月婷婷狠狠干| 91婷婷色五月| www色哟哟| WWW五月婷婷| 激情婷婷六月天| 丁香六月婷婷久久综合| 国产精品视频免费看| 九九视频精品在线免费| 我爱大香蕉| 久久久久五月丁香| 亚洲AV激情五月综合网| caop在线| 五月天激情综合网| www.丁香黄色五月天人与| 色啪影院| 91精品又长又大又粗又爽又猛| 九九久久99| 色色射| 91疯狂操操操操| 狠狠干青青草| www.色五月| 亲子乱AV一区二区三区下载| 9久热在线视频精品| 久久成人天| 99视频只有精品| 欧美日韩国产一区| 婷婷狠狠操| 色吧婷婷五月亚洲| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 丁香六月中文| 久热免费视频| 亚洲黄色影视| AV在线资源| 999久久久国产精品| WWW.桔色成人.COM| 丰满少妇猛烈A片免费看观看 | 99热这里有精品24| 国产成人片| 色婷婷色五月另类综合| 91狠狠综合久久| 国产精品久久..4399| 69色婷婷| 熟女啪啪视频| 五月丁香中文| 婷婷综合一二三| 九九热99热| 在线观看视频1区| 激情亚洲婷婷六月| 日韩丁香涩| 婷婷五月丁香基| 成人无码髙潮喷水A片| eeuss人妻| www.99视频| 久久这里只有精品久久| 九久9精品| WWW五月婷婷| 久久九九网| 97丁香花五月天激情小说| 99热这里只有精品免费| 九九99久久精品| www.五月激情.com| 中文字幕免费高清电视剧| 无码中文一区二区三区| 91男同视频| 精品久久久久久久久久久久人妻| 婷婷五月激情基地| 婷婷五月天免费视频| 五月婷婷之综合激情在线| 五月天涩涩| 99九九中文字幕视频| 久久婷婷五月综合啪| 久久人人九| 91色色色| 激情五月综亚网| 91se视频| 99久久这里只有精品| 色五月激情综合| 久草大| 国产伊人五月天| 欧美日本免费一道免费视频 | 亲子乱AV一区二区三区下载| 婷婷五月天成人| 午夜九九电影| 婷婷综合另类| 99re热在线视频| 激情精品久久| 婷婷综合久久综合| 日本一级特黄大片AAAAA级| 久久伊人大香蕉| 丁香五月av| 婷婷丁香色无五月| 婷婷精品在线| 欧美性生交XXXXX无码小说| 可以观看的AV| 日本九九九九| 五月婷婷 激情按摩| 亚洲综合五月天| 五月天啪啪| 在线成人va| 久久久天天啊| 成人天天爽| 大香蕉视频99| 99视频在线精品免费观看2| 桔色成人官方网站| 六月婷婷综合| 丁香五月天无码| 色一情一乱一乱一区9| 久久婷婷视频| 六月丁香社区| 99热免费精品热久久66| 丁香五月熟女| 天天综合色| 色亚洲欧洲| 开心久久五月天| 日韩精品在线观看9| 丁香婷婷大香蕉| 五月香六月婷| 天天操夜夜啊| 91九色欧美| 国产av一区二区三区| 日本一级特黄大片AAAAA级| 狠狠色综合777| wWW九九在线播放| 色色色色欧美| 婷婷99狠狠| www,99热| 婷婷五日b| 站长推荐无码播放| 丁香婷婷影院| 国产人妻人伦精品一区二区| 91狠狠色丁香| 成人五月天视频播放| 激情综合网络插| 色婷婷国产精品综合在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 丁香九月激情| 九九热精品视频在线观看| 99热这里只是精品| 国产亚洲色婷婷99精品| 久久香蕉福利| 久久丁香九| 狠狠婷婷色| 伊人久久艹| 成人五月丁香社区| 五月丁香六月婷婷色日| 久久99色色| 丁香激惜男女| 婷婷色婷婷| 色激情五月| 涩婷婷视频快播人妻| 国产XXXX搡XXXXX搡麻豆 | 99热这里都是精品| 天天摸天天肏| 看片视频在线免费日产在线看| 99久久99热这里只有精品| www.婷婷网| 婷婷伊人綜合中文字幕小说| 99riAv1国产在线观看| 六月婷婷青青青视频| 五月婷婷 激情按摩| 影音先锋女人AA鲁色资源| 亚洲热视频在线| 91色在线/日韩| 射久久丁香五月| 色色色色色网| 五月六月丁香激情| 五五月丁香花激情综合网| 丁香五月综合婷婷| 99九九热在线观看| 182TV大香蕉| 中文字幕婷婷五月天在线观看| 丁香五月AV| 国产熟女大叫受不了| 九色色| 五月激情在线| 久久久久9| 色五月丁香婷婷久草| 99亚洲精品综合在线| 亚洲激情淫网| 天天操人人干| 九色91国产| 噜噜狠狠色综无码久久合欧美| www.色多多婷| 五月激情综合激情五月| 色激情五月| 激情性爱五月| z色五月播播久久| 九九色婷婷Av| 五月天婷婷永久免费视频| www.99色| 激情综合五月激情XXXX| 香蕉久久国产AV一区二区| 大香蕉七区| 婷婷丁香五月高清| 99热每日| 色999;丁香五月| 精品无码久久久久久久久| 久久视频66| 五月婷婷性爱| 亚洲av免费在线| 婷婷五月综合社区| 久久免费丁香| 99免费视频| 五月丁香成年黄色| 五月婷婷天天| 色婷婷文字幕| 久久怕怕视频| 狠干综合| 狠狠搞狠狠操| 色色婷婷色色| 人人摸人人干| 欧美日韩成人高清在线| 激情五月天综合网| 极品另类| 午夜成人网站在线观看| 91色涩| 亚洲成人网在线观看| 99九九99九九九视频精彩| 99热e| 婷婷中文在线| 热99在线| 日本女天天爽| 极品少妇高潮啪啪AV无码| 日韩一66精品| 超碰只有精品在线| 五月婷婷久草在线视频综合| 色色综合网。| 五月激情小说网| WWW·色色色·COM| 婷色五月天| 久热9| 欧美日韩99| 丁香五月天在线直播观看| 国产毛片精品一区二区色欲黄A片| 午夜精品777| 久9综合| 天天干夜夜谢| 五月天婷婷綜合院| 天天做夜夜爽| 五月天成人在线精品| 久9热视频在线| 亚洲激情五月天| av激情在线| 色墦五月丁香| 丁香婷婷偷拍| 婷色综合| 丁香五月婷婷av| 精品思思久久| 免费无码毛片一区二区A片| 五月丁香另类网| 婷婷影院欧美| 久久草大香蕉| 五月天色婷婷小说| 色五月婷婷91在线| 亚洲免费99| 夜夜人妻五月天| 夜色五月天| 五月丁香亭亭| www.粉嫩av.com| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 丁香五月亚洲AV| caop视频| 天天干一干| 他改变了拜占庭| 精品欧美性爱超级爽| 激情五月婷婷综合| 91操操| 牛牛澡牛牛爽| 久久综合影院| 翔田千里aV中文字幕| 操逼电影免费看| 五月婷啪啪| 包操45分钟网站| 91n啪啪| 色综合久久久久| 狠狠操天天日| 丁香五月天.com| 色五月av| 婷婷五月天美女21p| 久久欧洲久久| 9色免费网| 女人天堂AV| 欧州色色| 婷婷五月色花丁香社区| 在线亚洲综合网| 综合网天天| 亚洲AV色婷婷人禽五月天| 久久综合激情| 五月婷护士| 91操碰| 热思思| 五月天国产成人| 色五月开心久久网| 欧美精品999| 五月丁香六月婷婷激情视频在线观看免费 | 激情操逼婷婷| 99碰超| 日本成人噜噜| 26uuu国自产精品| www99xxxx五月丁| 另类少妇人与禽zOZZ0性伦| 丁香五月天激情综合| 婷婷五月天va| 色色色婷婷五月天| 五月丁香狠狠爱婷婷综合| 久久这里只有精品99| 丁香婷婷视频在线| 五月丁香网站在线播放| 色哟哟精品| www.婷婷激情网.com| 五月婷婷开心网| 婷婷五月天伊人| 丁香五月天婷婷久久| 熟女激情网| 丁香六月欧美| 字幕网AV中文字幕| 五月色婷婷综合| 五月丁香成人小说| www五月天激情com| 亚洲 精品 综合 精品| 五月天婷婷基地综合网| 91日本在线免费| 亚洲成av人影院| 99热9| 荷兰av一级| 热99精品视频| 五月丁香婷婷久久| 久热久| 丁香六月婷| 91久久人人操| 狠狠婷婷色| 五月丁香婷婷色| 狼人久草| 婷婷少妇激情| 婷婷色五月在线视频| 人人干人人操人人摸人人做| 色婷婷久久| 14色综合婷婷| 9久久网| 99riAV成人在线视频| 三男玩一女三A片| 99热精品无码| 综合激情婷婷| 五月婷婷亚洲| 日本天天操| 日本熟女二区| www、色色色| 丁香五月网在线观看| 色欲日日躁| 亚洲第一色色色色| WWW·天天操·视频?| 九九性视频| 激情五月天色网站| 色综合中文| 亚洲色夜| 99干99| 91岛国片| 1区2区视频| 99啊精典免费视频| 美腿丝袜AV天堂网| 久久影视婷婷五月| 国产44页| 日韩久综合| 香蕉乱插| 五月丁香少妇| 99精品久久久久| 婷婷色啪| 久久9久| 99re在线观看| 丁香5月激情网| 久久五月婷婷电影| 久久色在线视频| WWW丁香五月| 激情99热| 色丁香在线视频| 五月天婷婷色小说| 深爱激情av| 五月婷婷丁香综合| 丁香五月亚综合图片| 狠狠干夜夜干| 99这里热| 九九综合| 狠狠穞A片一區二區三區| 五月丁香色色网| 中文字幕丰满孑伦无码专区| 久久A极片| 久9综合| 99色在线免费观看视频| 亚洲自拍天堂| 久久9精品视频| 激情综合五月| 久久6这里只有精品| 亚洲人人干| 激情五月丁香综合网站| 五月丁香婷婷基地| 久久婷婷网| 婷婷色六月| 国产亚洲成AV人片在线观黄桃| 久久黄色片| 久久女人九九| 丁香蜜臀黄色婷婷五月天| 91婷婷| WWW五月天| 五月天激情婷婷小说| 色色射| 国产熟女一区二区三区五月婷| 丁香五月天啪啪| 成人做爰A片免费看网站找不到了| 激情五月天婷婷播播久久综合91| 国产亚洲av片| 五月丁香六月香香蕉| WWW.五月天9999| 五月婷婷网五月在线| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 丁香婷婷影院| 亚洲乱码日产精品BD| 月丁香久久久| 99色干| 色婷婷丁香五月丁香| 婷婷五月天激情五月天深爱五月天| 在线成人视频免费| 99在线免费视频| 碰碰碰97国产| 狠狠爱激情网| 婷婷综合网在线| 丁香五月天AV| 亚洲日日日| 日本WwW色偷偷丁香花久久久京东热| 六月丁香婷婷大香蕉| 99精品在线播放| 欧美综合五月丁香六月婷| 99无码精品| 色五月婷婷五月天| 六月婷婷最新网址| 色婷婷婷av| 天天天久久人人人合| 26UUU欧美| 99热热热天天人人人超超碰| 26UUU欧美激情一区二区| 无码G高清天| www.色五月| 色五月激情五月| 97人妻碰碰碰久久| 久月丁香爱婷婷综合| 五月天成人网在线观看| 丁香五月影院| 九九综合图片网| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | www日本熟妇99在线视频| 婷婷月综合| 五月综合六月丁| 91婷婷色五月| 伊人网色婷婷五月天| 久99久在线| 日日夜夜狠狠干| 婷婷激情图片| 91久久九色| 丁香六月av| 久久99激情| 国产内射婷婷| 色情五月婷婷| 狠狠操狠狠操| 香蕉AV777XXX色综合一区| 五月天婷婷綜合院| 亚洲第一视频 久久| 热久久99热欧美国产亚洲| 1024久婷| 天天日人人| 丁香六月婷婷开心| 91精品久| 天天粽合合合合| 色五月综合| 日韩婷久| 五月丁香久久久| 五月婷丁香| 日韩精品一区二区亚洲AV观看| 婷婷色五月情| 五月婷久久| 91丁香五月| 深爱激情婷| 99热99艹在线观看| 婷婷色女| 久久婷婷色色| 狠狠色丁香婷婷| 亚洲性色XXXXX| 99综合| 大香蕉九九| 欧美乱码国产一级A片| 亚洲AV成人精品网站在线播放| WWW.五月天9999| 五月天色图| 91九色欧美| 激情99在线视频| 超碰人人摸人人操| 五月天天天操天天爽夜夜操| 新97人人上人人| 久久精品系列| 久久精品视频在这里有| 丁香8月手机综合| 五月婷高清视频| 色综合伊人网| 激情综合色网| 五月丁香婷婷色色色| 五月天婷婷色色首页| 99热久草| 亚洲激情四射色| 狠狠五月天婷婷| 日本一级黄色电影| 97人人草| 在线观看的av| 久久99精品久久久久久噜噜| 婷婷深爱五月| 色欲色香,www,com| 日操夜撸| 五月丁香婷婷狠狠操| 亚洲久艹| 色婷婷丁香香香蕉视频| 色婷婷中文| 深爱丁香激情| 亚洲精品白浆高清久久久久久| 九九家庭影院| 伊人久久艹| 开心久久xxx色| 日本99久久| 激情无码五月天| 亚洲激情综合| 五月丁香在线视频观看| 五月丁香免费看| 五月天激情国产综合婷婷婷就去爱| 新97人人上人人| 99碰碰| 开心深爱激情网| 丁香婷婷人妻| www.婷婷| 日韩抽插操逼| 99噜噜噜在线播放| 天天撸夜夜爽| 婷婷丁香无码专区| 五月六月激情| 国产亚洲成人综合| 久草五月天| 91嫩草久久| 97资源欧美日韩大香蕉超碰一区| 五月婷婷啪啪网| 天天色宗合| 婷丁五月| 国产午夜精品AV一区二区麻豆| 五月丁香人人婷婷在线观看| 色99综合色88| 综合九九| 婷婷丁香成人五月天| 亚洲成人av在线| 99热久| 欧美成人AAA片一区国产精品| 婷婷五月天99| 天堂va久久久噜噜噜久久Va| AV操操操| 大香蕉99| 婷婷中文字幕| er99免费视频在线| 丁香av网| 香蕉视频91| 日本va欧美va欧美va精品| 精品国产AV色一区二区深夜久久| www.五月天婷婷姐姐| 色五月婷婷丁香凹凸| 婷婷五月六| 无码人妻电影| 91狠狠综合久久久久久| 丁香五月色情| 99er热精品视频| av网址在线| 五月停停直播| 久久丁香婷| 色五月婷婷综合在线| 这里只有精品偷拍| www,黄色在线,con| 天天干狠狠| 久热人妻| 国产成人精品一区二区三区视频| 999影院成人在线影院| 五月丁香六月婷婷操操操| 超碰在线观看9| 久久婷婷五月综合| 亚洲另类婷婷五月综合| 自拍视频在线观看9| 碰碰91| 亚洲激情无码久久| 另类亚洲电影| 网色99| 白天AV月月| 97艹| 狠狠操综合| 五月综合影院| 日韩综合久久| 亚洲中文字幕在线观看| 婷婷五月另类网站| 婷婷五月天激情四射| 色婷婷综合久久| 久久婷婷内射| 五月丁香婷婷国产精品综合| 日本色色影院| 天天干天天插| 79色色色色| 丁香五月久久| 久草五月丁香婷婷综合| 91超碰九色| 色婷婷九月| 午夜丁香婷婷| 九热av| 高清无码视频网址| 色婷婷狠狠干芒果TV| 久操操| Av在线不卡一区| 天天干天天拍| 激情五月天综合婷婷网| 色色99色色| 影音先锋91资源站| 一点色成人网| 国产avapp 网| 色五月色综合| 国产67194| 国产超碰av| 久9热| 婷婷五月天激情网| 婷婷五月丁香五月天| 五月丁香 啪啪| 婷婷五月成人社区| 天天日天天操心| 色婷婷在线视频| 丁香五月婷婷激情视频播放| 五月婷婷激情性爱| 91人妻九色大屁股| 九九在线视频| 亚洲综合五月天| 丁香五月天激情小说| 色一情一乱一乱一区91| 久热精彩视频98| 五月天激情网图片| 婷婷综合色| 人妻久久久久久久久久久| www色婷婷久久综合久色 | 亚洲视频久久| 免费无码毛片一区二区A片 | 丁香五月六月婷婷自拍| 日韩一级A片黄色| 亚洲性爱AV| 免费视频在线观看的网站| 99在线观看| 六月婷婷五月丁香| 夜夜爽天天日| 99er免费在线观看| 色五月天丁香| 久久婷中文字幕| 曰本久久女| 高清一区二区三区日本久| 日韩999| 五月天社区| 色小说五月天| 狠狠狠狠操| 激情六月五月婷婷综合网| 久久99久久99久久99人受| 超碰色婷婷| 日本视频欧美观看免费| 日本韩国视频在线观看社区免费的9|