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
返回資訊列表
啪啪综合| 狠狠综合| 亚洲欧洲99| 中文激情网| 婷婷六月插屄激情| 色综合网上班开心婷婷久久| 久久爱综合| 91碰碰视频| 99在线观看视频免费| 亚洲中文字幕在线观看| 久久婷婷五月| 欧洲一区二区| 偷拍五月丁香| 精品久久久久久久久久久久人妻| 五月丁香| www一起操| 丁香婷婷六月| 91久久久久久久| 婷婷色五月久久| 五月婷婷综合影院| 久久精彩视频18| 婷婷午夜精品久久久| 天天做天天爰天天爽天天无遮挡| 97伦色婷婷| 99综合网| 日韩人妻无码精品| 97人人看| 97婷婷狠狠| 色丁香久久久| 这里只有精品久| 91黄址| 中文字幕在线免费看线人| 五月天伊人| 狠狠五月天婷婷| 色碰碰| 精品日本视频444| 99五月香婷婷丁香在线视频| 熟女人妻视频| 性欧美大战久久久久久久83| 91欧美| 丁香色播五月天| 激情九月综合| 婷婷久久大香蕉| 天花AV无码| 91男女视频在线观看| 九九五月天| 九九热免费视频| 亚洲噜色| 丁香六月情| 亚洲经典小视频| 国产色婷婷亚洲| 九九热这里只有精品556| 色色五月激情| 成人一级片| www.97干视频| 美女黄频aⅴ视频| 亚洲午夜Av| 日本在线观看aaa 99| 色综色网| 麻豆精品| 99欧州偷拍视频| 久久久五月天网站| 亚洲色婷婷| Av九九| 日熟女| 99久热精品在线| 亚洲无码你懂的| 九九久久腿| 九 九九九AV| 教师性爱毛片| www九九免费视频| 日本熟妇乱妇熟色A片蜜桃| 91色久| 婷婷成人五月天| 婷婷五月天久久久| 影音先锋91网站在线观看| 免费观看欧美成人AA片爱我多深 | WWW.久久久久久久| 五月丁香久久网| 人人妻人人澡| hd五月婷婷在线| 99热最新地址在线| 色天天综合| 色婷婷五月天视频在线| 97色热| 丁香色婷婷| 久久久久久久人妻| www.玖玖婷婷在线| 五月婷婷激情四季| 99热在线成人网站| 人人爱操| 97在线干| 久久与婷婷| 美女美女美女三级色天天天天天| 99热亚洲| 好叼操在线观看| 亚洲精品成人片在线播| 午夜爱爱网站| 性爱久久| 婷婷激情视频| 五月天色五月天| 五月开行婷婷色五月| 激情婷婷五月天| 91久热| 伊人综合网站| 丁香五月综合| 26uuu亚洲精品国产| 伊人网大香| 亚洲乱码精品久久久久..| 色婷婷在线视频观看| 六月婷婷网| 五月丁香美女视频| 99成人| 熟女人妻一区二区三区免费看| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 北条麻妃九九九国产精品视频| 在线超碰精品| 这里只有精品在线播放| 成人丁香五月天| 天天成人五月天| 情趣视频66| 丁香成人五月天| 伊综合蕉| 日本噜噜色网| 日日夜夜狠狠| 2014天天爽| 五月天 另类图片| 久热9| ww超碰在线| 噜噜色天天开心| 国产色99| 大香蕉久久久久久久久| 这里只有国产精品在线| 午夜丁香婷婷| 97色色色色色色色| 99热最新| 免费AAAAA网| www五月天com| 综合激情在线观看| 色五月色五天免费视频| 久久一操| 超碰99热精品| 色色色色色五月| 丁香丁婷五月激情| 六月色色| 婷婷五月四狠狠| 日本九九视频| 久久久久8888| 久久婷婷五月综合啪| 成人国产网站在线免费看| 91seav| 俺去也婷婷| 97超碰色| 天天摸天天透天天舔| 亚洲精品国产熟女久久久| 中文字幕永久免费| 婷色五月天| 五月婷啪| 色噜噜狠狠色综合日日| 五月激情另类| 99超超碰| 26uuu亚洲欧美日本| av操逼网| 91精品婷婷国产综合久久| 可以看的AV| 色婷婷久久9.com| 五月婷婷之激情五月| 成人做爰A片免费看网站找不到了| 五月丁香婷婷中文| 国产熟妇的荡欲午夜视频| 婷色人人狠| 色五月天电影| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 五月婷婷婷综合网| 丁香六月在线| 婷婷爱综合| 五月激情小说| 五月婷婷欲色| 亚洲成人中心| 能看的av| 99热.com| 丁香婷婷性爱| 色狠狠色噜噜AV天堂五区| 五月婷婷开心激情六月蜜桃| 久久天堂女人| 婷婷五月天丁香| 中文AV在线播放| 日本一道久久| 另类激情五月| 欧美精品啪啪| 色www久视频| 天天干狠狠艹| 丁香婷婷五月综合色情| 五月婷婷六月激情| 色婷网| 激情五月天在线观看色婷婷| 99燥99日| 999婷婷综合| 99热综合在线| 亚洲天堂有码| 五月婷婷六月色| 五月激情开心婷婷| 99人人操人人爱久久久| 亚洲情综合五月天| 亚洲激情网| 五月丁香六月婷婷不卡免费无码| 六月婷色| 香蕉久久国产AV一区二区| 这里只有久久精99| 人妻内射麻豆视频| 五月丁香 啪啪啪| 97碰碰九九视频| 99热首页| 国产精品久久久60086| 色色97丁香婷婷五月天| 免费黄色片子| 六月丁香综合| 丁香色婷婷五月天| 少妇激情五月婷婷| 成人电影在线免费试看| 综合久久婷婷99| 97婷婷五月天| 久久久久综合激动五月天| av五月天婷婷丁香| 精品亚洲国产成AV人片传媒| 91精品婷婷国产综合久久| 色天天综合色| 六月婷婷之青青草| 婷婷欧美综合| 日韩黄色电影| 亚洲天堂AV综合网| 婷婷色情 | 天天色综合网1| 色色色欧美| 色吧99| 五月激情六月综合| 婷婷月综合| 婷婷五月天BBw| 国产色色在线| 色激情综合| 91亚洲视频| 狠狠操综合| 久久99激情丁香婷婷小说网| 伊人狠狠干| a色色色色色| 久久一品区| 偷拍视频五月天| www99精品| 96色婷婷| 欧美毛卡| 成人在线日韩欧美| 久久99大全| 丁香五月天中文字幕| 天天爱天天做天天舔| 久久婷婷网址| 一区操| 久久精品99国产精品日本| 任你日视频| 狠狠操狠狠操| 超碰国产在线观看| 91色涩| 涩涩涩五月天| 思思热在线视频精品| 激情丁香五月婷婷啪啪| 丁香久久久| 五月丁香六月婷婷a v| 天天看片日日夜夜| 天天日夜夜夜操操操操| 狠狠操狠狠做| 丁香五月天资源网| 91se在线视频| 九九在线视频| 一本色道久久88加勒比| 琪琪色网址| 久久ri精品| 色婷婷五月综合| 色色色com| 人人摸人人搞| 久久97久久99久久综合欧美| 婷婷情色五月| 婷婷色啪| 岛国av网| 婷婷五月激情网| 色99热| 欧美久久网| 丁香五月影视| www.婷婷六月天| 色一情一乱一伦一区二区三区| 性一交一乱一交A片久| 婷婷久久综合| 91操在线| 99视频精品全部免费看| 黄涩毛片| 人人操av| 综合久久婷婷| 精品综合网在线| 婷婷五月a| 婷婷五月天综合久久| www久| 综合五月天亚洲婷婷| 天天色,天天操,天天射| 国产色99| 九九热精品视频| 少妇2做爰HD韩国电影| 亚洲综合另类| 亚洲色婷婷五月天| 婷婷久久免费看| 深爱1激情网| 99九九热在线观看| 亚洲狠狠色丁香婷婷综合久久| 在线综合啪| 久热中文字幕| 天天檫天天爽| 深爱激情六月天| 免费观看欧美成人AA片爱我多深| 熟女啪啪视频| 婷婷天天综合| 丁香五月天啪啪| 国产午夜成人AV在线播放| 婷婷综合在线视频| 五月丁香六月婷婷中文版| 亚洲综合狠狠艹| www.99热在线观看| 婷婷丁香五月天之开心少妇| 丁香激情网| 激情婷婷狠狠干| 欧美日本国产欧美日本韩国99| 性做久久久久久久免费看| 天天日P天天射P| 五月婷俺去也| 97操碰视频| 丁香五月天堂婷婷| 色综合久久88色综合天天人守婷| 91青娱乐青青草| 日韩黄在免| 九月婷婷久久| 欧美大道不卡| 人人色人人弄人人操| 久久多色| 99男人的天堂| av第一二区| 99国产小视频2013| 色婷婷香蕉| 亚洲视频另类| 国产资源91在线| 26uuu国产| 日本WwW色偷偷丁香花久久久京东热| 99精品热视频| 欧洲亚洲午夜| 欧美超级视频97| 欧美综合激情五月| 免费看欧美成人A片无码| 男人視頻站| 色婷五月| 精品一二三区久久AAA片| 久草五月天| 99精色| 极品精品一区二区三区在线| 678五月丁香亚洲综合| 色五月激情综合网| 97操操| 日韩在线9| 婷婷国产欧美97| 天天视频亚洲| 91超级碰人人操| 玖久精品视频9| 国产精品18久久久| 777精品成人a v久久| 亚洲色综合| 91九九| 91色久| 精品导航在线x不卡| 亚州性爱99| 色色五月婷婷网| 久久这里精彩免费在线观看| 大香蕉人妻| 综合五月天亚洲婷婷| 丁香五月天激情综合| 99热18| 五月天丁香婷婷社区| 99少妇精品| 99热这里只有精品86| 日操熟女| 991精品在线视频| 国产日韩av片| 伊人久久婷婷| 26uuu亚洲欧美| 丁香五月桃花在线激情综合| 色五月综合资源推荐| 五月婷婷综合性爱噜噜| 五月丁香综合激情网| 99资源人人| 丁香五月AV| 狠狠爱激情网| www.婷婷六月天| 99热免费网站| 真实的国产乱XXXX在线91| www,五月天激情| 伊人五月天久久| 色噜噜狠狠色综合网| 超碰超碰在线| 午夜69成人做爰视频| 狠狠操狠狠干综合| 91色在线/日韩| 日韩操人| 婷婷五月AV| 99精品久久久久久久久| 九九亚洲视频| 亚洲热热视频| 色亚洲婷婷| 丁香五月天社区婷婷| 九月av| 丁香色六月| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 国产激情在线观看| 狠狠爱综合网| 五月婷婷激情| 五月天色婷婷小说| 婷婷情色五月天| 禁欲电影完整版在线播放| 99青青草| .操區COm| 成人丁香色| 无码激情AAAAA片-区区| 丁XX 成人| 美女天天艹人人爽| 五月婷婷综合久久| www.婷婷五月天,com| 五月丁香六月激情欧美综合| 免费五月婷婷网| 69热在线| 天堂久久婷婷| 激情五月婷婷| 综合色播| 天天天在线观看| 亚洲人人干| 欧美色久| 六月综合婷婷开心伊人| 亚洲欧洲中文日韩久久AV乱码| 五月婷婷激情综合av| 五月视频日本免费观看| 激情综合婷婷| 日韩成人AV在线播放| 婷婷欠久少妇| 久热在线中文字幕色999舞| 婷婷久久五月丁香| 26uuu成人网| 色噜噜狠狠色综合成人99| 久热伊人91| 婷婷伊人綜合中文字幕| 亚洲天堂99| 婷婷99狠狠| 天天综合网亚洲综合网| 能看的av片| 91青娱乐青青草| 草久私拍| 国产九月婷婷| 665566 无码| 麻豆AV一区二区三区| 亭亭色色五月天| 99热这里只有精品中文字幕| 久久小片| 91碰免费视频| 亚洲中文字幕在线电影| 最新无毒无码AV| 免费看欧美成人A片无码| 色五月丁香婷婷| 五月丁香婷婷综合视频| 日本九九视频| 婷婷开心激情| 久久玖玖综合| 99热精品综合| 9l视频自拍9l视频自拍九色学生| 婷婷五月天欧美图片在线播放电驴| 777.色色| 激情5月婷婷狠狠干| 99热大全在线观看| 丁香五月自拍| 色狠狠五月天| 婷婷丁香五月天综合网| 婷婷丁香五月六月激情| 电影《战争与艾拉》免费观看| 大香蕉婷婷| 色婷婷丁香网| 婷婷五月天影视| 狠狠人妻久久久久久综合丁香| 丁香五月天激情婷婷丁香六月| 婷婷五月天激情小说| 五月丁香婷中文| 91精品婷婷国产综合久久| 91九色首页| 色色色色热热| 青草热视频这里只有精品| 色宗合久久五月婷婷| 五月精品免费XXX| 丁香五月天色| 五月天婷婷激情春色小说| 日日夜夜狠狠干| 天天透天天爱| 开心激情综合| 色色色五月天婷婷| 91久久久久久久久久| 日韩一级A片黄色| 天天操天天爱天天日| 色婷婷精品视频在线播放| 亚洲电影中文字幕| 亚洲AV成人在线| 亚洲精品操一操、噜一噜、摸一摸、爽 | 中文超碰视在线| 天天操天天干天天射| 97碰碰人人视频| 天堂成人久久| 青青草a在线| 爱婷婷久久视频| 激情五月婷婷丁香| 婷婷五月激情中文字幕| 久久婷婷青青| 大香蕉人妻| 五月综合六月丁| 99热这里| 色噜噜丁香| 无码髙清| 久久婷出差欧美色两性综合网| 69凹凸成人综合网| 色婷婷色| 婷婷丁香人妻| 色五月超碰| 天天做天天爱天天爽| 久久丁香综合香蕉| 婷婷五月激情网站| 99精品综合视频| 婷婷伊人五月天| 9 7总站超级碰免费视频| AV网站免费在线| 五月熟妇婷婷久久| 久久婷婷五月天亚洲欧美| 丁香九月婷婷综合| 五月丁香色色色| 97人人干| 五月婷婷色播| 久热视频97AV在线观看| 天天看片日日夜夜| 99久久久久久| 色婷婷综合丁香五月天| 激情的五月| 97干综合网| 九色综合网| 99热在线观看免费中文| 激情 婷婷| 婷婷丁香无码专区| 思思热在线视频观看精品| 五月婷婷五月色| 激情都市另类| 99久久国产成人精品| 伊人玖玖婷婷| 大香伊人婷婷影院| 激情九九这里只有精品| 99国产精品久久久久久久久久久 | 婷婷激情五月综合| 亚洲成人中心| 日韩有码久久| 99热国产这里只有精品| 久久成人亚洲欧美电影| 人人爽人人爽人人爽人人爽| 另类天堂| 小视频aaa久久久| 97色永久免费视频| 狠狠色噜噜狠狠狠888| 丁香五月色情| www.狠狠操.co m| 五月丁香999| 久久一品区| 黄色AAAAA| 五月婷婷操操| 色婷婷a三区麻| 久久精彩免费视频| 亚洲视99| 日本色婷婷| 日韩欧美一区二区三区四区| 99综合网| 亚洲色欲欧美一区二区三区| 国产做爰视频免费播放| 伊人超碰| 色婷视频| 插插干干干色| 五月婷婷 婷婷五月 一区二区 久久久 | 免费看欧美成人A片无码| 亚洲VA欧美VA| 日本乱子人伦在线视频| 丁香激情六月天婷婷| 青青草视频免费观看| 天天噜天天爱| 婷婷99视频全集高清| 综合色综合| 色www99| 日本久久爱| 99色.com| 亚洲午夜AV| 色婷婷六月性| 欧州婷婷五月天综合| 99热成人在线观看| 婷婷五月中文字幕| 狠狠做深爱婷婷久久综合一区| 另类小说五月天| 久热九九| 色色色图| 色五月激情问网站| 超碰操网| 精品福利911| 亚洲情欲久久| 97人人干人人操| Se.婷婷五月天| 一二线视频 另类| 五月丁香六月婷婷久久| 99热综合网| 亚洲激情网| 亚洲色爽| 操人精品| 国产熟妇的荡欲午夜视频| 五月天婷婷中文字幕在线播放| 婷婷第一页| 亚洲视频99| 79色色免费| 超碰资源在线| 成人无码精品1区2区3区免费看| 五月天婷五月天综合网在线观| 91碰免费视频| 99久在线精品99re5热视频| 婷婷五月天毛片| 色色com| 99爱无码| 日日噜狠狠色综| 丁香五月天亚洲综合| 欧美五月婷婷| 9九热视频| 婷婷五月天激情五月天| 97碰碰在线观看视频| 思思99热| 91精品无码| 婷婷五月天亚洲丁香| 99碰碰| 久久天堂女人| 亭亭五月色男人| 九九亚洲视频| 欧美毛片www| 美女网黄| 久久久A级视频| 狠狠精品干练久久久无码中文字幕 | 狠狠看狠狠| 噜噜狠狠色综合久| 啪啪日本欧美| 成人做爰高潮A片免费视频| 久9无码视频| 亚州性爱99| 五月丁香爱婷婷深深| 青青草99热久久精品国| 五月天婷婷Av| 免费视频WWW在线观看网站| 91操网| 思思久久精品| 九九精品在线网| 99这里有精品免费| AV色五月婷婷| 婷婷伊人中文字幕| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 免费视频1区| 成人免费120分钟啪啪| 国产99久久久| 黄色片区子| 日日夜夜干| 婷婷五月天香蕉| 五月综合777| 99热最新精品| 91久久五月天| 激情色五月天| 欧美十二区| 99热国品| 欧美午夜乱妇午夜福利| 99免费超碰在线| 六月激情婷婷| 99热啪啪| 狠狠精品干练久久久无码中文字幕| 综合激情五月天| 91在线日本| 国产熟妇乱子伦hd| 激情五月天色播| 日韩成人精品中文字幕| 久综合网| 无码少妇高潮喷水A片免费 | 日韩一区二区三区无码| 激情开心五月婷婷| 激情五月深爱五月观看| site:pzdcoin.com| 久久伊人五月天| 91Chinese在线| 99久热在线精品| 欧美六月| 成人色站,在线视频,看片-SS1AV| 就爱操www com| 99综合99| 高清无码视频网址| 婷婷五月综合色拍| 国产无套精品一区二区| 午夜婷婷| 久久婷婷免费| 99久久五月丁香野外| 97极品在线| 色播综合| 激情的五月| 丁香久久久| 玖月婷婷爱丁香| 玖玖九九99| 丁香色婷婷| 无码啪啪| 99这里都是精品6| 五月天婷婷成人网| 在线sebiav精品视频| 午夜丁香综合婷婷| 天天想夜夜爽天天爽| 五月天自拍网| 五月天婷婷综合网| 国产亚洲在线| 国产免费av网站| 97色片| 天天操天天操综合| 色色射| 丁香五月天啪啪| 欧美色片中文字幕久久久久| 自拍视频在线观看9| 精品婷婷| 亚洲 在线 性爱 | 玖玖婷婷免费| 新97人人上人人| 婷婷五月AV| 色婷婷久久综合| 午夜不卡久久精品无码免费| 97碰人人操| 色亚洲视频| 来吧亚洲综合网| 99操碰| 丁香天堂夜| 熟女激情网| 色婷婷五月天偷拍| 欧美精品中文字幕亚洲专区| 久久天堂女人| 一本久久亚洲五月婷婷| 欧美天堂久久| 九九色影院| 嫩草哈哈操| 久久这里只有国产| 99视频只有精品| 丁香性爱在线视频| 天天色天天搡| 欧美在线视频免费播放| 老司机视频lsj爱就色| 亚洲综人色综网| 五月天偷拍| 久久婷婷亚洲| www.色综合.com| 婷婷五月天激情网站| 婷婷情色激情| 日韩ww| av 一区三区四区| 开心激情站| 久久这里只有精品视频15 | 久久玖玖综合| YW无码| 五月四色色| 日本色色色| 99热亚洲| 婷婷涩涩五月天| 激情内射人妻1区2区3区| 欧美色色色| 激情五月天啪啪| 一二线视频 另类| 99啪99| 涩综合婷婷| 五月婷婷综合色啪首页| 六月丁香综合网| 99精品国产在热久久| 丁香5月激情网| 色五月琪琪| 综合99综合久久久久久久| 91尤物九色在线| 日本3级片一区2区| 67194中文字幕| 欧美色骚婷婷五月天| 噜噜噜狠狠色综合| 人人爱操| 久青操| 色五月天 丁香| 六月婷婷亚洲| 欧美97超碰| 色婷婷六月天在线| 国产一级黄色影片,| 99久久免费精品| 97久久精品视频| 婷婷五月天狠狠| 久久一操| 丁香五月天.com| 91丨九色丨熟女|新版| 丁香五月综合婷婷| 亚洲思思热久| 激情开心五月天| 热的国产,热的综合,热的有码 | 九九九九综合| 亚洲色婷婷五月天| 国产视频久色| 久久六月婷婷| 狠狠干夜夜干| 九九大香蕉黄色影院| 97久久久久| 入口五月婷婷六月香| 婷色五月| 五月天激情子轮| 色99欧洲色19| 久久久性爱视频| 色综合爽| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 狠狠丁香| 伊人干综合| 五月天色五月| 337午夜福利| 久热伊人9| 99热在线精品观看| 综合99综合久久久久久久| 天天操综合网| 丁香五月亚洲天堂| 亚洲成人在线观看网址| 超碰九九热| 碰碰操91| 成人日韩欧美| 色狠狠综合| 香蕉久久六月| 色婷婷五月综合| 婷婷的五月天另类视频| 婷婷情色五月| 99思思| 五月婷婷激情综合视频| 丁香五月激情棕合| 五月丁香婷婷综合网| 五月婷婷影视| 日韩99视频| 激情五月综合网| 天天插插天天| 丁香五月天欧美成人| 丁香深五月婷婷| 色五月在线播放| 丁香五月天欧美成人| 亚洲1区| 丁香六月激情综合| 丁香五月亭亭六月综合激情网| 五月婷婷丁香大香蕉| 亚洲色五月天| 激情综合五| 五月天激情网址| 91九色大屁股| 五月丁香色停停啪啪啪| 类似婷婷激情综合网站| 欧美综合婷婷网| 99久在线观看| 嫩草视频。| 婷婷综合网| 婷婷五月天在线观看| 色视五月天婷婷| 五月丁香性爱| 色五月婷婷影视| 最近中文字幕2019视频1| 国语精品探花| 青青草搞屄视频网站| 色你久久| 五月婷婷丁香五月| 久久综合久色欧美综合狠狠 | 91色噜噜狠狠狠狠色综合| 色五月综合| 激情五月综合| 欧美啄木乌丝袜人妻系列| AV在线大香蕉| 亚洲AV久久久久久久久久久久久久久久| 色婷婷av在线观看| 超碰在线免费9| 亚洲精品激情| 亚洲精品五月| 国产成人VA| 久操福利| 99操无码视频观看| 婷婷玖玖丁香| 色综合色色色色色色综合| 亚洲亚洲人成综合网络| 91精品久久久久久77777| 91一起操| 日本久久性| 洗浴中心操B视频| 99re这里有精品手机在线| 深爱丁香网| 九九热视频精品2| 五月综合丁香婷婷| 精品99在线| 久碰综合| av在线免费网站| 婷婷六月色情| 免费成片在线观看| 最新日韩久热免费视频看看| 99热大| 六月婷婷AV| 97色在线| 嫩草AV久久伊人妇女超级A| 色色热| 伊人综合网站| 人妻日日日| 天天操综合网| 99色综合| 韩日另类| 色级婷婷| 人橾人| 色九九丁香九月色九九色| 男人操女人高潮91视频| 97日韩无套内| 免费观看高清无码| 久久国产高清| 激情久久久久久| 亚洲操操| 一區四區歐美日韓| 丁香五月综合色婷婷| 天堂爱爱| 亚洲成人乱码av网站| 五月婷婷福利| 亚洲激情婷婷| 大香蕉婷婷色| 99热精品在线播放| 99riAV国产精品视频| 玖玖婷婷五月天| 免费看欧美成人A片无码| 九九在线视频| 综合狠久久| 丁香五月性爱爱五月| 99久久9| WWW.桔色成人.COM入口| 色色五月婷婷丁香| 天天操婷婷| 久久婷婷视频| 99日热在线视频| 日本WWW九九九| 色婷婷五月天激情| 99视频精品全部免费 在线| 五月六月激情婷婷| 丁香五月六月婷婷怡红院| 综合五月天| 五月激情小说| 激情综合九| 一区二区三区四区牛| AV免费在线网站| 久9热| 九九热这里只有精品9| 久久免费精彩视频| 五月天综合在线| 伦乱人妻| 色色综合成人网| 天天干天天操天天爽| 91性高潮久久久久久久久| 久久久久久18| 激情婷婷内射| 五月天婷婷乱论小说| 天天做天天爱天天高潮| 超碰激情五月| 婷婷婷五月天最新综合你懂的| 五月丁香综合中文| 六月色丁香婷婷| 日夜操B| 五月婷婷香蕉| 欧美色色色色色| 免费AV播放| 偷偷操99| AV天堂婷婷五月天| 五月开心激情| 婷婷五月六月丁香| 亚洲激情丁香五月基地| 9|无码久久久久久| 高清av在线国产| 立川无码av| 成人短视频在线免费观看| 精品人妻伦九区久久AAA片| 丁香婷婷色九月| 天天日天天狠狠操| 婷婷色婷婷| 97综合在线| 97碰免费精采视频| 五月婷婷激情四月| 91操操| 91色涩| 色五月激情婷婷| 97夫妻超碰| 丁香亭亭久久| 色色网站| 日本色99| 伊人婷婷大香蕉| 六月丁香啪| 亚洲色情网站| 激情五月天久久| 五月婷婷综合网在线播放| 狠狠干婷婷| 亚洲六月色婷婷| 99九无网码| 超碰国产AV| 亚洲中文乱字字幕在线永久| 狠狠噪| 欧美va亚洲va在线播放| 国产精品18久久久| 久鲁鲁色网| AAA久久| 久久综合这里只有精品1 | 九九99精品| 丁香激惜男女| 激情深爱五月天| www.av视频xx999.com| 99精品久久| 69热在线| 思思热99热| 五月激情婷婷图片基地| 丁香五月欧美| 五月丁香啪啪啪| 99热在线观看| 99久久a线观| 欧美大片| 丁香六月婷婷色XXXX| 丁香五月-激情综合| 婷婷五月色网| 伊人热婷婷| 色五月综合| 五月婷婷久久综合| 五月丁香婷婷基地| 久久九九玖玖| 激情婷婷五月天| 久久综合热17c| 精品人妻在线免费观看| 国内精品玖玖| 亚洲无码激情| 色啪影院| 激情婷婷综合| 色亭亭影园| 婷婷激情综合| 超碰91av| 嫩草AV久久伊人妇女超级A| 国产精品国产VA片国产| 丁香五月天亚洲综合| 五月婷婷香| 99啪在线| 九九热在线精品| 五月婷婷丁香五月亚洲色| 国产99久| 先锋资源91| 欧洲亚洲免费视频区| 激情综合网婷婷五夜| 开心婷婷五月| 婷色五月| 影音先锋AV资源男人站| 丁香色婷婷五月天| 国产亚洲色婷婷久久99精品91| 一起草av| 日本色狠狠| 99日本精品视频热| 色婷婷中文| 五月99久久| 四虎婷婷五月天| 久综合九综合99| av一区免费看| 色婷婷裸体色性在线| 欧美啪啪9| 色婷婷影视| 色偷偷五月天| 色婷婷综合久色AV五色最新| 中文AⅤ大全| 99热9999| 国精产品久久| 91黄址| 久久大大香| 伊人狠狠丁香婷婷综合尤物| 久久成人综合五月天| 九九青草热| 色六月 婷婷| 色五月天激情| 99国产视频网| 丁香五月天在线视频| 激情丁香五月AV| 婷婷久草| 爆乳熟妇一区二区三区爆乳照片| 视色网在线播放| www.婷婷.com| 三十熟女| 天天操比比| 婷婷五月天视频亚洲| AV美美午夜| 五月丁香激情综合六月涩涩爱| 婷婷五月色播天| 五月婷婷啪啪| 婷婷六月天| 五月丁香黄色| 婷婷免费成人视频| 丁香五月人妻| 极品九九九九九九| 亚洲熟妇AV乱码在线观看| 精品久久99码| 夜夜爱网站| 婷婷五月天六月| 天天噜天天插| 超碰国产在线| 人妻激情视频| 亚洲成人无码片| 青青久在线视频免费观看| 五月丁香| 天天综合五月天| 性色五月天| 五月婷婷丁香色播网| 丁香六月婷婷高清| 狠狠色五月| 亚洲第一av| 超碰人人色| 伊人五月综合网| 999影院成人在线影院| 久久这里只有精品无码| 九九热欧美| 激情五月天综合网| 成人在线综合| 91日精品| 五月婷婷激情日本| 日本少妇AA一级特黄大片| av五月天婷婷丁香| 狠狠干五月| 天天干人人奸97| 99热在线观看| 五月丁香婷婷五月色| 国产真实乱了老女人视频 | 九九热这里只有精品5| 男人的天堂在线婷婷| 色播激情| 丁香五月天成人| 九久久婷婷| 五月婷婷激情啪啪| 五月婷婷性爱网| 国产精品A片在线| 九九爱精品网站| 丁香综合久久| 六月婷婷操逼| 久久婷视频| 香蕉久久国产av一区二区| aaa久久| 色婷婷成人网| 开心六月婷| 色噜噜狠狠色综合日日免费| 国产在线6| 日本性激情色播| 开心五月深爱五月丁香五月激情五月| 天天操夜夜爱| 情趣视频66| 色哟哟精品| 岛国AV网| 极品人妻VIDEOSSS人妻| 成人.在线日韩| 九月性爱网| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色色性爱视频| 成人国产欧美大片一区| 人人爱人人草| 日本一級黃色一級片| 九色porny在线观看激情四射| 丁香六月婷婷久久亚洲天堂| 182TV大香蕉| 日本色婷婷| 美女主播野战视步页| www.五月天社区| 狠狠狠狠狠狠色| 久热免费| 91女人18毛片水多国产| 六月婷婷七月丁香| 成人av免费观看| anquye五月| 精品,99| 综合五月网| 婷婷丁香花五月天| 亚洲人人操| 日本三级日本三级99| www.亚洲激情.com| 五月婷网| 玖玖精品视频99| 五月综合丁香婷婷| 久热99| 激情久久网 | 99成人精品| 五月久久婷婷天堂视频| 99re思思热久久| av首页在线| 成人婷99最新| 天天干夜夜欢| 亚洲不卡欧洲| 日本美女97在线视频| 五月婷婷熟女| 开心五月激情五月丁香五月婷婷| 99热免费精品| 成人做爰高潮A片免费视频| 日本婷婷在线| 性日本激情| AV操操操| 人妻熟人中文字幕一区二区| 大香蕉人人网| 丁香五月狠狠综合欧美| 色激情五月| 日韩AV无码影片| 九九综合久久| 色婷视频| 国产精品久久久久9999小说| 欧美精品A片一区在线观看| 内射激情在线| 色99热| 天堂成人A片永久免费网站| 热久久91| 香蕉AV777XXX色综合一区| AA丁香综合激情| 欧美性猛交99久久久99| www.亚洲激情| 99精彩视频| 日本色99| 五月天狠狠网| AA片在线观看视频在线播放| 伊人色综合网| 天天日天天操天天干| 99ri精品在线| 在线观看欧美3区| 五月婷婷播| 另类视频一区| 色婷婷六月| 美妞av| 99啪啪视频| 色婷婷在线影院| 色久五月天| 天天天天天日| 夜夜资源站| 婷婷五月天网址| 日本性视频| 成人网站免费sxj| 亭亭玉月丁香| 操一区| 精品婷婷| 色婷婷久久综| 亚洲成人中心| 婷婷五月丁香综合亚洲| 九九家庭影院| 久久九九综合| 91综合在线| 日韩无码色色| 久久婷综合| 婷婷色色丁香五月天| 玖玖午夜视频| 天天色天天操天天射| 丁香六月婷婷社区| 色99网站| 变天就操逼婷婷五月| 精品A√| 97色干在线观看| 亚洲婷婷丁香五月亚洲| 大地9中文在线观看免费高清| 三级三久久线久久99久目本WW| 九九色图| 婷婷六月丁香激情| 色噜噜狠狠一区二区三区| 丁香五月天婷婷在线视频| 五月天丁香婷|