亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

C# agsXmpp接入Openfire生產(chǎn)級(jí)實(shí)踐指南 簡(jiǎn)介本資源是一個(gè)基于C#的XMPP即時(shí)通訊客戶(hù)端Demo面向.NET開(kāi)發(fā)者及IM協(xié)議學(xué)習(xí)者解決如何使用agsXMPP庫(kù)快速連接Openfire服務(wù)器并實(shí)現(xiàn)登錄、收發(fā)消息等核心功能的問(wèn)題。項(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依賴(lài)庫(kù)與多語(yǔ)言資源文件整體壓縮包僅728KB輕量易上手。已有705人學(xué)習(xí)下載適合初學(xué)者理解XMPP通信流程也便于進(jìn)階者參考資源綁定、Message事件監(jiān)聽(tīng)、SSL連接配置等關(guān)鍵實(shí)踐。代碼結(jié)構(gòu)清晰模塊分離明確——XAML負(fù)責(zé)視圖、ViewModel層封裝業(yè)務(wù)、IMXmpp.cs專(zhuān)注XMPP會(huì)話(huà)管理可直接運(yùn)行調(diào)試是掌握C#Openfire即時(shí)通訊開(kāi)發(fā)的實(shí)用入門(mén)范例。1. C# 用 agsXmpp 連 Openfire不是“能連上就行”而是消息不丟、重連不崩、調(diào)試有跡可循的生產(chǎn)級(jí)接入起點(diǎn)你寫(xiě)了個(gè) C# 客戶(hù)端調(diào)XmppClient.Connect()成功了發(fā)條消息對(duì)方也收到了——但第二天測(cè)試時(shí)發(fā)現(xiàn)斷網(wǎng) 30 秒后重連失敗、離線(xiàn)消息收不全、連續(xù)發(fā) 5 條消息只到 2 條、Wireshark 抓包看到一堆stream:features循環(huán)重協(xié)商……這時(shí)候你才意識(shí)到XMPP 不是 HTTPConnect()返回 true 只是握手開(kāi)始不是通信就緒。這個(gè) agsXmpp Openfire 的 Demo 正是為這類(lèi)“表面跑通、實(shí)際翻車(chē)”的場(chǎng)景而生它不是教你怎么寫(xiě)第一行new XmppClient()而是把登錄鑒權(quán)、心跳保活、消息 ACK、異常重連、XML 調(diào)試日志這五根骨頭全拆開(kāi)擺給你看。適合正在做企業(yè)內(nèi)網(wǎng)即時(shí)通訊模塊、IoT 設(shè)備狀態(tài)上報(bào)、或需要嵌入輕量級(jí) XMPP 能力到 WinForms/WPF 應(yīng)用的 C# 開(kāi)發(fā)者。它不依賴(lài) .NET Core 新特性實(shí)測(cè)兼容 .NET Framework 4.6.1Openfire 版本覆蓋 4.7.x 到 4.8.4最新穩(wěn)定版所有代碼無(wú)第三方私有 NuGet純 agsXmpp.dll 原生 System.Xml。2. 為什么選 agsXmpp 而不是 MatriX 或 SharpXMPP從協(xié)議棧深度和調(diào)試可見(jiàn)性講清楚2.1 協(xié)議層控制力你能親手干預(yù)stream:stream的每一個(gè)字節(jié)agsXmpp 是少有的、在 .NET 生態(tài)中仍保留完整 XML 流解析/序列化控制權(quán)的庫(kù)。它的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)被擠下線(xiàn)執(zhí)行強(qiáng)制登出); client.Close(); // 避免殘留連接 TriggerForceLogout(); } };提示MatriX 庫(kù)雖功能更全但其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ì)話(huà)限制、插件攔截等問(wèn)題的關(guān)鍵“后悔藥”。2.2 調(diào)試友好性日志不是“Connected”或“Disconnected”而是可回溯的 XML 會(huì)話(huà)流agsXmpp 的XmppClient.SetXmppLogging()方法支持將雙向 XML 流含時(shí)間戳、方向標(biāo)識(shí)、縮進(jìn)格式輸出到任意TextWriter。這不是簡(jiǎn)單的 DEBUG 日志而是可直接粘貼進(jìn) XML 工具驗(yàn)證的協(xié)議會(huì)話(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)定位問(wèn)題環(huán)節(jié)是 TLS 協(xié)商失敗SASL 認(rèn)證 Base64 編碼錯(cuò)誤還是 Openfire 的stream:features缺少bind或session對(duì)比之下SharpXMPP 的日志默認(rèn)只輸出高層事件如OnAuthError無(wú)法還原協(xié)議交互細(xì)節(jié)。2.3 輕量與可控?zé)o隱式線(xiàn)程、無(wú)自動(dòng)重連、無(wú)魔法配置agsXmpp 的XmppClient是純粹的單線(xiàn)程事件驅(qū)動(dòng)模型。它不啟動(dòng)后臺(tái)線(xiàn)程池不自動(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)聽(tīng)OnClose事件自行實(shí)現(xiàn)退避策略如指數(shù)退避。這種“不省事”的設(shè)計(jì)恰恰是生產(chǎn)環(huán)境最需要的——你知道每一行代碼對(duì)應(yīng)哪個(gè)協(xié)議動(dòng)作沒(méi)有隱藏的線(xiàn)程競(jìng)爭(zhēng)沒(méi)有不可控的自動(dòng)重連導(dǎo)致 Openfire 會(huì)話(huà)數(shù)爆炸。某公司曾因 MatriX 的自動(dòng)重連未設(shè)上限在網(wǎng)絡(luò)抖動(dòng)時(shí) 1 分鐘內(nèi)創(chuàng)建了 200 個(gè)無(wú)效會(huì)話(huà)觸發(fā) Openfire 的maxSessionsPerUser限制而全局拒絕服務(wù)。3. 登錄與消息收發(fā)從XmppClient初始化到可靠送達(dá)的完整鏈路3.1 初始化與連接繞過(guò) DNS SRV 查找直連 Openfire 端口Openfire 默認(rèn)監(jiān)聽(tīng) 5222明文和 5223SSL但 agsXmpp 默認(rèn)會(huì)嘗試 DNS SRV 查詢(xún)_xmpp-client._tcp.domain這在內(nèi)網(wǎng)無(wú) 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 并配證書(shū) client.Username user1; client.Password pass123; client.Resource desktop; // 關(guān)鍵Resource 決定會(huì)話(huà)唯一性避免 conflict 錯(cuò)誤注意Resource是 XMPP 地址JID的資源部分格式為userdomain/resource。Openfire 默認(rèn)允許同一用戶(hù)多端登錄但若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 用戶(hù)狀態(tài)同步agsXmpp 默認(rèn)使用 SASL PLAIN 認(rèn)證Openfire 默認(rèn)啟用。認(rèn)證過(guò)程分三步每步均可監(jiān)聽(tīng)// 1. 連接建立后觸發(fā) OnConnect client.OnConnect (sender, e) { Log.Info(TCP 連接已建立開(kāi)始登錄...); 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上線(xiàn)通知 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(用戶(hù)名或密碼錯(cuò)誤請(qǐng)檢查 Openfire 用戶(hù)管理界面); } };關(guān)鍵點(diǎn)OnAuth觸發(fā)不代表用戶(hù)已在 Openfire 在線(xiàn)列表可見(jiàn)。Openfire 需收到presence typeavailable/才標(biāo)記用戶(hù)在線(xiàn)。因此OnAuth后必須主動(dòng)Send(new Presence())否則其他用戶(hù)看不到你。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. 過(guò)濾自身發(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 用戶(hù)標(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)聽(tīng)OnMessage回執(zhí)3. 接收方已讀回執(zhí)XEP-0333 Chat Markers? agsXmpp 無(wú)內(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)聽(tīng)回執(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ù)庫(kù)狀態(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 勾選。否則客戶(hù)端發(fā)了requestOpenfire 直接忽略永不回執(zhí)。4. 避坑指南那些讓開(kāi)發(fā)者凌晨三點(diǎn)還在抓包的 agsXmpp Openfire 組合問(wèn)題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ù)器證書(shū)。而 Openfire 自簽名證書(shū)或內(nèi)網(wǎng) CA 證書(shū)未被 Windows 信任庫(kù)收錄。解決方案 A開(kāi)發(fā)/測(cè)試全局禁用證書(shū)驗(yàn)證僅限內(nèi)網(wǎng)可信環(huán)境ServicePointManager.ServerCertificateValidationCallback (sender, cert, chain, sslPolicyErrors) true;方案 B生產(chǎn)導(dǎo)入 Openfire 證書(shū)到 Windows 本地計(jì)算機(jī)受信任根證書(shū)頒發(fā)機(jī)構(gòu)或使用X509Certificate2加載證書(shū)并傳入XmppClient需修改 agsXmpp 源碼不推薦。4.2 現(xiàn)象登錄成功OnAuth觸發(fā)但OnRosterItem一個(gè)不觸發(fā)聯(lián)系人列表為空原因Openfire 默認(rèn)關(guān)閉“自動(dòng)發(fā)送好友列表”Roster Push。客戶(hù)端需主動(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)聽(tīng)響應(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但無(wú)received原因XEP-0184 要求接收方客戶(hù)端主動(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)斷開(kāi)。agsXmpp 無(wú)內(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)鍵配置與客戶(hù)端行為對(duì)齊讓兩端不互相“猜謎”5.1 Openfire 控制臺(tái)必調(diào)參數(shù)影響 agsXmpp 行為Openfire 的配置項(xiàng)直接決定 agsXmpp 客戶(hù)端能否穩(wěn)定工作。以下是在Server → Server Settings → XMPP頁(yè)面中必須核對(duì)的 5 項(xiàng)Openfire 配置項(xiàng)默認(rèn)值推薦值對(duì) agsXmpp 的影響操作路徑Allow plaintext authentication over non-encrypted connectionsDisabledEnabled若用 5222 端口必須開(kāi)啟否則 SASL PLAIN 被拒Server Settings → XMPP → SecurityEnable Message Delivery ReceiptsDisabledEnabled啟用 XEP-0184否則request無(wú)響應(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壓縮開(kāi)啟會(huì)導(dǎo)致 XML 解析失敗Server Settings → XMPP → Compression提示修改后需重啟 Openfire 服務(wù)配置才生效。不要只點(diǎn)“保存”。5.2 客戶(hù)端資源Resource命名規(guī)范避免conflict錯(cuò)誤的硬性規(guī)則Openfire 將userdomain/resource視為唯一會(huì)話(huà)。resource不是可選字段而是會(huì)話(huà)生命周期的錨點(diǎn)。agsXmpp 的client.Resource必須滿(mǎn)足長(zhǎng)度 ≤ 64 字符Openfire 限制不含空格、/、、、等非法字符區(qū)分大小寫(xiě)Desktop≠desktop建議包含環(huán)境標(biāo)識(shí)便于問(wèn)題定位。推薦生成策略C#// 生產(chǎn)環(huán)境機(jī)器名 進(jìn)程ID 時(shí)間戳哈希 string resource $prod_{Environment.MachineName}_{Process.GetCurrentProcess().Id}_{DateTime.Now:HHmmss}; // 開(kāi)發(fā)環(huán)境用戶(hù)名 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 消息路由與離線(xiàn)消息理解 Openfire 的defaultOfflineMessageStrategy當(dāng)目標(biāo)用戶(hù)離線(xiàn)時(shí)Openfire 如何處理發(fā)給他的消息這由defaultOfflineMessageStrategy參數(shù)控制默認(rèn)為store存儲(chǔ)。但 agsXmpp 客戶(hù)端不會(huì)自動(dòng)拉取離線(xiàn)消息需主動(dòng)請(qǐng)求// 登錄成功后主動(dòng)拉取離線(xiàn)消息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)求所有離線(xiàn)消息 iq.AddChild(offline); client.Send(iq); } // 監(jiān)聽(tīng)離線(xià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($收到離線(xiàn)消息{offlineMsg.From} | {offlineMsg.Body}); // 處理離線(xiàn)消息... } } } };注意Openfire 的離線(xiàn)消息存儲(chǔ)有容量限制默認(rèn) 100 條/用戶(hù)且不存儲(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本身無(wú)重連邏輯但生產(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)聽(tīng)器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)致磁盤(pán)爆滿(mǎn)。正確做法是動(dòng)態(tài)開(kāi)啟特定包的日志在 Openfire 控制臺(tái) → Server → Logging → Log Level添加PackageLevel說(shuō)明org.jivesoftware.openfire.nio.NIOConnectionFINEST查看 TCP 連接建立/關(guān)閉org.jivesoftware.openfire.auth.SASLAuthenticationFINEST查看 SASL 認(rèn)證流程org.jivesoftware.openfire.session.LocalClientSessionFINEST查看會(huì)話(huà)創(chuàng)建、資源沖突這樣日志文件中只出現(xiàn)關(guān)鍵協(xié)議交互而非海量UserManager或Group的 INFO 日志排查效率提升 5 倍以上。從那以后我每次部署 agsXmpp 客戶(hù)端都強(qiáng)制走一遍這三步用 Wireshark 抓包確認(rèn)stream:features是否含urn:xmpp:receipts在 Openfire 日志中搜索SASLAuthentication確認(rèn) PLAIN 認(rèn)證是否成功用另一個(gè)客戶(hù)端如 Spark發(fā)一條消息驗(yàn)證OnMessage是否觸發(fā)且Body可讀。漏掉任何一步上線(xiàn)后都可能變成深夜告警。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天综合网亚洲综合网| 国产亚洲深夜激情| 亚洲中文字幕妇伦久久| 手机在线A片| 综合亚洲网| 青青草色情网站视频| 久久久久9| 欧美日韩不卡a片| 欧美性高潮| 亚洲第一色页夜| 狠狠色婷婷777| 欧美日韩一区二区三区四区蜜桃| 亚洲97综| 好吊色青靑草| 青青草国产欧美非洲黑人| 午夜精品久久久久| 久久夜色一区二区| 欧美老熟另类| 色五月婷婷五月天| 中文字幕在线日亚洲9| 人人澡综合涩| 中文字幕一区 二区三四五 区日 日骚| jk白丝没脱就开始啪啪| 热久久国产| 99999久久精| 亚洲欧美啪啪| 九九九不卡| 97爱啪| 综合网久久| 日本免费不卡二区| 蜜桃精品一区二区三区ww| 国产超碰人人操| 久久国产免费激情视频| 国产51色综合久久免费| 精品一二三区久久AAA片| 男女日B国产| 欧美性天天| 神马久久午夜| 91肉丝| 爱爱动态60秒| 中国操逼无码| 中文人妻av高清一区| 一级毛片电影免费看| 精品欧美乱码久| 96麻豆精品一区二区三区| 91n处女在线观看| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 人妻熟女av国产网站| 免费国产视频| 无码高清操逼| 色色色网站| 旡码电影特区| 久久綜合很很很| 久久熟妇五十路一区| 伊人青青一区成人视频在线观看区 | 91挑色欧美| 一区二区不卡| 亚洲在钱| 操人人| 视频在线观看免费一区二区三区| 探花一区在线| 久久久久久久久久久六六| 丝袜六区| 日韩9999| 亚洲欧美天| 中文字幕三四五区| 综合国产影视三级| 久久97| 国产 日韩 欧美 人妻 熟女 中文| 九九热男人天堂| av情色影音| 超碰98综合网| 少妇人妻好深太紧了vr91| 久久一级无码精品毛片6| 91久操| 夜夜操av亚洲一区二区| 蜜臀网址在线| 成人26uuu| 五月激情视频| 老女人老91妇女老热女| 永久电影三级在线观看| 日韩黄色成人性爱| 91九九九逼| 97日韩欧美亚洲| 欧美裸体美女日麻屄| 国产亚洲美日韩Aⅴ中文字幕无码成人| 国产精品一区二区三区,亚洲综合| 人妻熟女av国产网站| 久久9精品视频| 九99久久| 人人妻人射| 黄色污污污污污污网站| 国产精品电| 国产日韩欧美中文在线播放| 久久综合乱子伦国产免费| 日韩精品一区,二区 九九...老司机| 一二三区精品视频| 国产男女无套视频免费观看| 美女91在线观看| 日韩一二三区| 六月丁丁香| 人伦四五区| 亚洲AV成人无码一二三久久| 亚洲国产精品久久久久婷婷青年| 新怡红院| 操比国产| 在线播放欧洲免费av| 免费簧片在线观看| 一二三卡欧美日韩人妻免费精品| 日韩在线观看中文字幕视频| 亚洲图片欧美另类综合免费视频大大香| 国产在线综合网| 久久xxxx| 加勒比色99999| 一区操逼日比视频| 999 久久久| 伊人一区二区在线播放| 日韩少妇丰满亚洲| 国产强上视频在线观看| 亚洲精品97中文字幕| 国产极品精品美女视频| 98超碰日本| 91精品久久久久五月天精品| 亚洲青色欧美| 亚洲AV无码AV吞精久久久久| 精品乱码久久久久| 日逼国产| 精品人妻一区二区三区免费视频| 天天爱天天操| 亚洲**2021在线观看| 青青草自拍视频在线播放| 另类图片综合| 欧美亚洲丝袜美女电影| 男人的天堂午夜av| 嗯嗯啊啊好大好爽| 97摸视频| 日产操逼| 欧美性天天影院| 亚洲日韩成人性爱视频| 成人怡红院| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 小说区 图片区色 综合区| 九九九久千久久激情蜜桃在线看 | 约操熟妇| 亚洲色图91| 黄呦呦在线| 人妻在线视频| 久久久久国产精品久久久| 丰满人妻一区二区三区四| 欧美性爽xyxOOOO| 青春草A| 在线强奷到舒服的无码视频| 国语精品对白| 中文字幕天天操| 欧美性爱1080p| 91视频女生| 亚洲影视综合网| 免费少妇一区二区| 天天欧美| 绑缚麻绳人妻寝取完整版| 欧美日韩香蕉| 18禁的网站在线| 亚洲男人在线观看天堂| 91五月天| 99久久无色码| 天天插天天插| 51一区二区三区| 97超碰人妻| 91美女視頻| 天天摸,夜夜摸| 日韩乱中文| 国产又粗又大硬免费色网视频| 国产精品天干天干综合网麻豆| A 天堂在线观看视频| 91老熟妇| 97欧美资源| 久久人妻无码毛片A片麻豆| 欧美不卡在线美女| 精品人人插人人操| a v网站在线播放| 欧美片第一页| 美女啊啊啊啊啊啊| 精品一级| 精品熟妇视频一区二区| 久久精品人妻一区二区| 中文字幕免费观看| 情色日播放AV| 婷婷激情啪啪| 五月婷婷六月丁香| av一区二区三区 中文| 被操高清无码视频| 综合国产影视三级| 日本操逼视频不卡直接放| 久久久久久综合久久伊人蜜月| 欧美 亚洲 另类 综合| 日韩人体偷拍| 在线观看一卡二卡| 九九这里只有精品| 欧美黄色片AAAAA| 国产精品成人福利在线| 欧美性爱第一区| 亚洲高清视频在线免费观看| 放黄片放3级黄片没穿衣服| 农村少妇久久久久久久| 9精品久久久久| 青青草久草AV| 国产精品3| 成人精品一区二区三区| 精品十三区| 91 国产丝袜在线放观看| 神马精品视频| 久久嫩草国产成人一区| 中文一区二区婷婷视频| 天美精品一区二区三区四区在线观看| 欧美成人综合| 日韩专区久久久| av草草在线电影| 97操综合| 神马久久久久久| 999久久久九九九九| 99热这里都是精品| 国产在线视频午夜精华在| 五月婷亚洲精品天堂| 友优传媒精品在线一区二区| 亚洲国产精品无石码久久| 中文字幕在线免费观看 | 欧美人妖内射| 麻豆成人影音在线| 午夜国产乱伦视频| 另类 日韩 熟女| 中文字幕av乱伦| 97干在线视频| 欧美曰韩国产精品| 加勒比色综合| 欧美高清18A片| 啪啪啪东京| 中文字幕交换人妻| 亚洲综合五月天| 天堂日本亚洲欧美| 粉嫩av一区二区三区四季| 传媒在线观看一区二区三区| 国产精品熟女一区二区三区| 97精品熟女少妇一区| 人人操人人狠狠操| 欧美色图亚洲特色| 国产综合久| 日韩欧美性吧婷婷乱伦大香蕉| 中文字幕日韩电影人妻| 91精品黄在线观看| 不卡码视频| 五月天亚洲网| 天天干天天操天天操夜夜操天天操| 十八禁av无码免费网站APP| 人人插人人搞人人操| 久久天天摸| 亚洲人精品午夜不卡| 中文字幕制服诱惑| 日本亚洲熟女视频| 和协影院中文字幕三区| 热思思免费视频| 欧美黄片视频在线观看免费| 久久av色| 亚洲男人天堂AV| 精品人体无圣光凹凸| 999狠狠综合| 国产免费一区| 成人麻豆av电影网站| 26uuu国产| 美女黑人91神马| 欧美色999| 熟女人妇一区二区三区| 久久男人网| 蜜臀久久99精品久久久久久婷婷| 天天精品| 偷拍新久久| 日韩中文字幕精品一区在线| 夜夜操av亚洲一区二区| 丰满人妻一区二区三区| 1024亚洲中文字幕久在线看片你懂的| 日韩欧美中文字幕搭讪巨乳美人妻视频| 人妻二区| 欧美男人亚洲天堂| 91精品无码人妻系列| 91中文精品日韩欧美在线| 欧美激情专区| 亚洲 欧美 91| A级片一区| 欧美午夜精品久久久久久超碰| 91男人综合| 久久免费精品视频免一| 久久久久久久久久久久欧美日| 国产无马在线| 97玖玖人妻| 男人午夜天堂| 97玖玖人妻| 日本一区二区中文字幕久久| 国产11页| 亚瑟国产精品久久无码| 91久久堂| 波多野结衣先锋影音| 人妻大相焦在线| 久久欲| 成熟熟女国产精品一区二区| 男人a天堂手机在线版| 九九亚洲色在线观看| 亚洲一卡2卡3卡4卡乱码网站| 骚熟女吞| 久久老子无码午夜伦不卡| 午夜啊啊| 嗯嗯嗯啊啊啊在线免费观看| 久久综合国产精品国产| 午夜久久久| 超碰九色| 激情小说在线视频| 午夜福利在线视频1000| 郑州宾馆老熟女露脸啪啪| 久久久少妇诱惑精品视频| 久久6热视频免费观看| 91天美免费| 97舔舔| 操逼日批| 久操免费观看| 国产亲戚伦亲在线| 天堂中文资源在线bt| 亚洲.欧美.丝袜.中文.综合| 亚洲欧美日韩免费观看| 国产精品久久久久久久免牛肉蒲团 | 97超碰总站| 操逼日韩无码| 日韩成人无码| 天天操天天7| 91美女丝袜诱惑视频| 91久久久亚洲| 亚洲影视第一页| 玖玖综合.com| 欧美一区二区三区蜜桃| 2017天天拍大香蕉| 欧美91精彩| 夜夜一区二区| 久草网站免费在线观看| 青草一区二区| 欧美日韩亚洲少妇寂寞影院正在播放| 丁香婷婷激情五月天无毒不卡 | 婷婷五月天激情小说| 翔田千里A片一区二区| 久久久精品一区二区| 久久久久久亚洲精品不卡人乳| 久久透逼视频| 亚洲欧美在线丝袜| 色在线69堂| 91 国产丝袜在线放观看 | 97chaopenrihan| 久久人人妻| 最新日韩黄片| 日韩丝袜二区| 性爱乱伦视频免费| 麻豆三极片| 亚洲玖玖爱| 欧美日韩亚洲五月天婷婷| 九色 人妻 大香蕉| 我爱大香蕉| 日韩欧美一级特黄大片| 免费观看国产不卡av| 黑人猛交| 亚洲在线a| 天天综合色图| 91无码精品| 国产欧美日产一区二区三区 - 国产欧美日 | 天美av在线观看| 欧美人人AAA| 亚洲av影音先锋| 亚洲av综合伊人久久| 蜜臀久久99精品久久久久久婷婷| 狠狠干2020| 久日91在线| 国产精品午夜成人福利| 欧美熟妇乱码在线一区| 亚洲码和欧洲精品激情系列| 久久久久久久久久久久久9999| 亚洲欧美成人在线| 日本天天操| 亚洲激情在线| 日本在线一二| 欧美激情视频一区二区三区不卡| 日本在线不卡123| 91蜜臀熟女| 盗摄 精品 另类 一区| 长长久久88视频| 久久五月丁香| 污啪啪啪视频| 国产又黄又猛又粗又爽的网站| 国产 日韩 欧美 人妻 熟女 中文| 99久视频| 精品久久久久,69国产成人精| 六月婷婷综合| 搡老女人老妇女老妇老熟女怎么读| 欧美性天天影视| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 九月AV| aaa淫乱视频| 国厂麻豆77q4| 亚洲综合色图欧美| 加勒比综合| 久久久久久99AV无码免费网站| 男人女人18禁片免费看网站| 国产一级不卡在线观看| 玖玖婷婷五月天| 久久久久13| 久久久av爱| 校园春色综合香蕉| 中文 人妻 制服| 97超碰人人操人人操| 激情 欧美 亚洲 小说| 亚洲欧洲综合成人av一区| 中文字幕aⅴ在线视频| www.激情| 日本超碰97日韩精品人妻| 97精品视频在线播放| 9丨久久九九九| 亚洲欧美一区二区网址| 丰满高潮18xxxx| 92福利社视频| 青青三级视频| 男人亚洲天堂| 性爱av在线免费观看| 极品丝袜无码| av2014 日韩在线中文字幕| 九热中文字幕| 操逼网站地址| 玖玖爱一区在线| 怡红院久久老司机| 亚洲精品毛片在线观看| 操狠狠| 亚洲偷拍欧美激情| 人人看黄色视频| 岛国成人av在线播放网址| 黄色小说亚洲| 91A欧美电影网站| 美女尤物人人操| 夜夜操老骚逼视频网站| 日韩超碰97| 久久久久亚洲Aⅴ无码| 热久久精品| 亚欧操逼片在线观看| 乱伦熟女专区| 东京热激情视频一二三区| 欧美综合 站| 青娱乐国产剧情av一区| 97天天摸天天碰| 亚洲图片偷拍欧美| 人妻81p| 丝袜喷水在线| 在线日韩日本亚洲国产| 激情小说五月天| 蜜桃视频啊啊啊啊| 日韩亚洲精品一区二区| 国产天天看| 20cm女自慰在线日韩欧美| 九九热最新| 9久9久9久9久视频网站| 亚洲欧美在线观看2021| 亚洲素人网| 一级@啪啪视频| 啊啊啊啊啊在线视频| 国产一级高清免费观看| 亚洲天天艹| 2017天天操| 午夜精品久久久久久久男人的天堂 | 深夜激情无码| 九九九九免费视频| 综合欧美日本三级| 国产怡红院在线| 日本道久久综合色色| 国产人妻精品一区二区三区秋霞| 成人精品一区二区91毛片不卡| 色婷婷婷五月天激情四射| 久久的免费性爱视频| 九九热免费在线国产视频伊人五月| 国产美女自拍视频| 久久综合18p| 午夜小电影在线插入淫高潮| 歐美一級亂黃99在綫精品| a片在线播放| 亚洲色91C| ..日韩av毛片精品久久久| 伊人 俄罗斯 a v| 麻花豆传媒剧国产MV出差| 操逼999| 亚洲天堂 视频你懂的| 91日产桃蜜| 花野真衣| 日韩欧美tv一区二区在线观看| 国产精品国产| 丁香激情五月| 摸奶性爱视频网站在线免费播放| 午夜毛片高清免费不卡| 青青操轻轻| 诱惑网综合| 国产精品色哟哟| 黄色网址在线免费观看| 欧美东京热青青草| 中国黑人三级片网站上区| 色哟哟511老熟女| 亚洲图片小说欧洲| 国产乱弄免费在线视频。| 亚洲成人福利电影免费 | 1024久久高清视频| 欧美一级国产一级| 中文字幕一区二区三区50路| 日日骚 av| 成人性爱电影网| 精品国产Av无码久久久伦古装| 亚洲激情色片| 亚洲黑丝在线| 国产综合网站在线播放| 日韩精品人妻| 久久久999国产精品| 人妻密肉在线观看| 天天草天天干天天日| 秋霞怕怕片| 男人天堂久久精品不卡| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久久精品中文字幕麻豆| 九九热精品在线| 手机在线视频国内精品| 久久的免费性爱视频| 亚洲色综网| 青女在线| 天堂日本亚洲欧美| 天美精品av| 国产精品无码AV网站| 超碰在线人妻中文字幕| 最新AV在线| 亚洲国产中文字幕| 欧美亚洲se91| 97青娱乐超碰久久| 乱日视频| 亚州情色j区| 国产精品熟女乱伦| 国产精品无码在线| 99re国产精品视频| 黄色片,com| 超碰97人妻免费在线| 啊啊啊啊啊啊在线| 高颜值美女口爆高潮浪叫| 96国产污污污丝袜| 清清草影| 亚洲视频二区 | 99最新日韩偷拍视频| 欧美日韩一干二干| 在线视频一区二区传媒| 大香蕉 222| 青青草在线成人视频| 黑丝少妇在线观看| 久久精品小视频| 丁香九月婷婷| 东京热激情视频一二三区| 狠狠色丁香| 99这里有精品| 蜜臀久久99精品久久久久久久久| 91亚洲黑人| 久久精精区一区二区一蜜桃一区二区| 日韩国语字幕| 91青视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美性天天影视| 五月综合久久| 人妻天天操天天爽视频免费| 无码heyzo高清一区| 67914在线精品观看| 欧美精品第四五页中文字幕在线观看| 熟女中出视频| 东北操逼| 超碰99在线| 亚洲欧美综合| 一级片在线观看高清无码| 噜噜噜在线视频| 国产午夜无码片在线观看影视| 岛园激情| 亚洲国产欧美日韩人妻日中文| Av色五月| 久久视频少妇美女| 97久久超碰日韩精品| 久久久不卡| 天天看精品动漫视频一区| 国产精品久久久久久久电影渣男| 99久久婷婷丁香| 五月丁香婷婷色| 一道本东京热加勒比一区二区三区| 欧中日成人免费影视| 日本熟妇色熟妇在线视频播放| 色婷婷A V一二三四区麻豆综合| 国产午夜精品一区二区三区牛牛| 亚洲无码偷拍| 被体育老师抱着c到高潮| 亚洲色图超碰在线| 色拍偷亚洲| 亚洲在线a| 日韩Va亚洲va欧美Ⅴa久久| 日本色婷婷| 北京美女一区二区| 欧美国产婷婷久久| 国产黄片在线免费观看| 色性综合| 蜜区区视频79 | 亚洲Av无码成人精品国产| 日本高清电影欧美色图| 欧洲小说色图视频另类| 欧美色宗合| 一本一道vs波多野结衣| 欧美最婬乱婬爆婬性视频| 精品人妻伦一区二区三区久久| 亚洲综合九九| 国产无套粉嫩白浆在| 天美一二三在线观看Av| 国产精品丝袜在线| 欧美东京热精品A∨| 另类亚洲图色| 国产久久久久久| 丝袜熟女一区二区三区| 激情终合网| 校园春色五月天| 综合久久欧美| 日日日骚女人精品| 成人小说另类在线| 97超级久久强资源| 久久9精品| 国产亚洲禁久一区二区| 青木玲在线不卡| 91视频伊人| 久久人妻97久久久久久久| AV有码在线| 国产激情在线观看| 国模91| 国产AV无码AV| 久草精品一区| 干干干天天| 久久99草| 免费亚洲黄色视频在线观看 | 涩涩这里只有精品视频| 神马久久网| 国产AV色黄看到爽| 日韩钢筋无码高清啾啾啾| 亚洲男人天堂网| 国产又粗又又黄又猛| 97在线视频免费看| 五月婷在线| 人妻天堂三区| 欧美午夜精品久久久久久3D| 亚洲精品久久久久久久蜜桃臀| 26uuu欧美| 97超碰色情| 91大胆欧美| 日韩性爱啪啪视频| 亚洲人在线| 国产多人在线观看视频| 91爰爱欧美| 熟女精品va中文字幕| av草草在线电影| 97人人超| 亚洲欧美日韩中文播放| 污到发麻的视频 国产| 四虎国产精品永久在线囯在线 | 亚洲脚交| 成人情色一区二区| 高清国产精品福利网站| 久久久久亚洲精品| 日本日皮视频逼| 超碰99在线| 禁止观看美女黄| 国产日逼视频| 亚洲欧美内射| 禁止观看美女黄| 日韩欧美成人综合在线| 亚洲91射| 春色校园综合网| 超碰成人最新最好看| 少妇高潮一区二区三区在线| 欧美激情总合网| 亚洲熟女精品| 96超碰网| 歐美性天天| 久99热| 三级日韩一区二区三区| 国产热av| 国产乱婷婷精品二区三区| 欧美大香蕉同搞| 久久αⅴ| 亚洲精品蜜桃久久久久久久| 亚洲无码99| 国产精品一区av在线| 嗯~啊~轻一点 视频| 中文字幕在在线观看网站| 强奸乱伦大香蕉网| 亚州熟女乱伦| 综合网少妇| 久久久久久久久久久999| 六月丁香婷| 亚洲导航深夜福利| 五月婷亚洲精品天堂| 日本免费一区二区不卡| 久久久久9久久久久| 久久精视频美日韩在线视频| 日韩成年人性爱视频| 97在线观看免费| 91撸色网 玖玖网 欧美| 99热这里只有精品99| 久久久久亚洲av综合波多野制衣| 精品对白久久不卡| 久久是精品| 久久久久亚洲一区女同性恋中文字幕| 91粉芽高清在线一区二区| 国产一区二区精品久久99| 思思热国产高清| 日日97| 五月天加勒比啪| 一区二区三区四区五区高清无码永久视频 | 熟妇乱伦一区二区| 大香蕉视频啪啪啪啪| 2017大香蕉国产精品久久| 久久超碰久| 另类小说五月天| 色情乱伦AV| 99re国产精品视频| 欧美五十路熟| 青青操网| 久久产精品一区二区三区电影| 67914在线兔费成人视频| 亚洲欧美日韩电影网站一区 | 精品国产乱码久久久影院| 极品AV网站在线观看| 五月天色电影| 亚洲综合影视| 动漫片子网站3黄| 丰满人妻一区二区三区在线| 欧州色图区| 殴美牲| 素人美腿视频网站| 九九久久首页| 抽查国产福利主播| 97色97好| 久9久9精品| 久久夜夜夜| 男人的天堂在线| 成人在线午夜视频一区| 97超碰中文| 国产一| #NAME?| 亚洲欧美清纯| 精品视频一二三中文| 97在线免费观看| 视频国产欧美在线播放| 黑人精品XXX一区一二区| 呦呦影院| 丰满人妻无码一区二区三区| 香蕉人人操tv| 丁香五月大香蕉| 亚洲最大91网| 男人天堂日日夜夜| 日本黄页视频在线观看| 香蕉国产97| 欧美姓爱综合网| 成人精品在线免费视频| 日韩人妻一区二区| 波多野结衣一级视频| 欧美日韩性爱操大逼| 色五月综合| 国产精品 午夜福利| 96久久久精品| 亚洲国产天堂| 亚洲春色欧美激情自拍| 51一区二区三区| 国内外色色色色色成人视频| 在线人妻熟女一区二区三区四区五区| 97天天弄| 日本不卡一二区| 亚洲国产成人7777| 久久久久国产精品片区无码直播| 夜夜一区二区| 97伪v| 自拍六区| 无码丰满熟妇一区二区浪潮AV| 大伊香蕉在线视频免费| 好湿好紧好爽 视频| 99国内熟女露脸视频| 欧美综合第一页| 国产精品干干干| 亚洲天堂男人在线| 亚洲综合贴图91| 中文字幕一区二区三区50路| 萌白酱自拍视频| 综合色图,成人综合网| 激情人妻另类| 黑人免费福利视频| 日本欧美国内在线| 97国产色图| 欧美少妇色图| 国产精点久久久成人| 男女91| 超碰97综合| 欧美性爱十八禁| 国产成自自拍在线观看| 亚洲日韩美女丝袜美腿人妻视频| 欧美色性爱| 男人天堂久久日韩| 国产深喉视频一区二区| 亚洲国产麻豆一区二区三区| 人人摸人人干| 激情欧美97| 黄片不用下载在线观看| 操一区| 国产操逼网站亚洲一级黄色| 岛国成人av在线播放网址| 中文字幕超碰CAO| 在线视频亚洲无码| 亚洲精品男人的天堂| 欧美线天码中字| 岛国在线一区二区三区| 狠狠色一区二区中文字幕| 熟女乱3伦999| 日本天堂网| 久久精品一区二区三区四区五区| 五月婷婷激情网| 夫妻AV网站| 秋霞免费AV| 999熟女精品| 秋霞久久亚洲精品成人| 精品一久久久| 岛国片在线播放| 日本少妇va7777| 精品一区二区三区国产| 无码人妻一区二区一牛影视| 性色aV一区二区三区噜噜| 五月婷婷六月激情| 欧美天天综合在线| 女同在线视频一区| 国产乱子伦久久精品综合一区二区三| 亚洲激情久久| 亚洲影视综合| 精品91摸| 久久久久亚洲三级电影| 操B久久| 成人七区| AV色五月| 欧美,日韩,中文,另类| 97国产|免费| 亚洲福利中文字幕在线| 网页导航五月天免费一二三区 | 日韩97P| 农村妇女一级二级三级视频| 97亚洲精品超碰| 偷拍欧美综合| 手机午夜电影神马久久| 国产乱弄免费在线视频。| 中文字幕日韩电影人妻| 性欧美精| 国产成人网址| 午夜小电影在线插入淫高潮| 日韩99神马视频播放| 亚洲欧美综合区自拍另类| 蜜臀久久精品久久久久视频| 色狠狠色| 精品国产av一区二区三区四区入口| 人人爽夜夜操| 色嗨嗨在线| 亚洲欧美97| 中文字幕天天天天天| 蜜乳AV一区| 夜夜嗨一区二区三区直播内容| 好淫网一二三视区| 操迟操逼在巾线Fre看| 青青草AV色| 久久色一区| 99精品成人免费看| 97欧美在线| 五月开心久久AV官网| 欧美十八禁在线看| 激情五月天中文字幕色| 蜜桃久久久久久久久久久久| 久久性视频| 成 人 A V免费视频在线观看| 91激情综合| 韩国久久97| 日日操丁香五月天| 91色插| 天天色怡春院| 国产又粗又又黄又猛| 91精品国产日韩欧美综合| 中文字幕一区二区三区人妻不卡| 综合日韩激情另类图片| 国产热RE99久久6国产精品首| 亚洲精品一区二区日本| 后入福利| 一区二区三区蜜桃成人撸久久东京热| 欧美做爰无码A片视频| 97超碰磁| 欧美双插| 熟妇一区,二区,三区。| 天天天乱色综合全| 特污免视频| 人妻熟女av国产网站| 伦激情人妻另类人妻| 97超碰香蕉| 玖玖爱伊人玖玖爱| 9 7超碰在线免费观看| 婷色五月| 亚洲欧美国产其他二区| 欧洲亚洲国产综合在线| 九久精品| 久久午夜神马| 色97综合中文字幕| 91爰爱欧美| 亚洲男人天堂网久久| 黑丝少妇在线观看| 第一高清av中文字幕| 狠狠色狠狠色狠狠五月| 亚洲日韩精品久久久久一区壹牛| 精品久久久久综合无码| 婷婷10月天青娱乐| 中文字幕一区二区三区蜜桃视频| 欧美亚洲影视| 91亚洲青青草原精品1区| 婷婷五月天网| www.久久99| 欧美很很操视频| 国产精品香蕉热久久新品| 99国产在线 精品 视频| 亚洲男人久久综合天堂| 免费人成毛片乱码| 国产v亚洲v日韩v欧美v片另类 | 婷婷中文字幕| 综合色图区| 日韩人妻无码专区| 亚洲欧美国产日本一区二区三区| 亚洲二区精品在线观看| 在线观看岛国有码| 亚洲日韩美国人妻| 精品一区二区综合熟妇| 思思热影视| 色乱二区| 日本在线播放不卡一区| 强免费黄色网址| 99热在线观看| 99无码| 女人的久久久| 欧美成人精品一区二区三区| 亚洲AV乱码专区国产噜噜亚洲| 96久久科窝| 欧美日韩资源在线| 日韩三级在线观看mp4| 99蜜桃臀亚洲成人在线观看| 亚洲精品一卡二卡三卡福利视频网站 | 亚州综合AⅤ| 亚洲人久久久网| 蜜臀在线网站| 啊啊啊免费视频| 天天做天天爱夜夜爽毛片试看| 超清福利精品视频在线| 精品人妻一区二区视频| 日本一区二区不卡精品| 婷婷色五月激情| 久久国产99精品72福利 | 俞拍久久国应视频| 9久在线视频只有精品| 眼镜人妻101.com| 美中日韩无码| 人妻嗯啊啊在线播放| 97干色天堂| 色五月激情AV在线| 色臀AV| 五月丁香六月综合缴清无码| 人人插人人摸人人| 五月丁香在线| 色情亚洲日本成人| 亚洲风情综合网| 超碰免费97| 久草视频在线视频在线视频在线观看| 91精品大奶人妻| 日本中文字幕高跟| 热G综合热G中文| 女人精品内射国产99| 综合在线导航一区| 精品精品精品| 加勒比五月天| 精品78| 美女写真| 天天干2019| 天操天操夜操夜月操月年年操操| 97欧美超碰| 激情视屏国产乱伦强奸| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 青青草在线成人视频| 九七毛片九九毛片| 秋霞 色色| 国产大学生高潮在线播放| 91色综合激情| 亚洲欧美91| 欧美,日韩综合久久| 亚洲欧美激情另类色图| 久久精品成人一区二区三区蜜臀| 91狠狠| 九九人人操| 午夜AV污污污| 欧美A片中文字幕| 亚洲综合五月天婷婷丁香| 中文字幕第23区| 日韩av无码网站| 67194国产| 九9精品| 密乳AV免费观看| 中文字幕艹艹| 美女性91| 色综合久| 吊色| 九九干| 97看操| а√天堂资源官网在线资源| 亚洲五月丁香花狠狠干一区二区三区| 麻豆传媒一区二区在线观看| 亚洲成人黄色在线观看| 96精品在线| 九九九国产| 中文字幕jul-617人妻熟女| 91丨精品丨国产丨丝袜| 亚欧性爱无码| 久久有碼| 操逼日批| 日韩精品99久久久久久中文字幕| 91久久久亚洲| 操穴国产| 91丨国产丨白浆秘 洗澡动漫| 先锋精品av色鲁| 久久伊人影院| 九九无码| 天美传媒婬乱在| 很很干很很操| 久夜视频| 青青国产精品在线| 欧美综合另类| 欧洲无码一区二区| 日本精品五区| 天天看片天天爽| 日韩啊V| 色色99| 欧美成人四级在线播放| a人片中文字幕一区二区| 操逼逼中文字幕| 日韩人妻精品| 成人网址在线观看| 热热色91| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 91天天美女| 九九Av| 97干在线| 国产美女91视频| 黄色在线网站| 老熟妇一区二区三区| 99热欧美| 日韩亚洲欧美中文字幕| 97色欧州| 女人喷水视频在线观看| 精品国产乱码久久久影院| 狠狠狠狠狠狠| 成年人黄色视频免费| 亚洲欧美精品久| 无码视频黄色网战| 午夜超碰| 日韩情色AV| 中文字幕亚洲在线一区| 中文字幕一区二区三区50路| 99天天超碰| 五月丁香社区婷婷日韩欧美精品影院 | 南澳成人一级片在线播放| 国产按摩一区二区三区| 一级性爱视频免费观看| 亚洲伊人久久精品影院| AV中文在线| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 日日碰狠狠添天天爽超| 精品69网| 九九自拍伦理| 激情综合五月婷婷| 26uuu国产亚洲综合| 亚洲久久东京热一二三四五区视频| 99精品无码| 国产黄片精品在线| 大香蕉伊人75| 欧洲精品人妻| 亚洲黑丝在线| 91在线视频免费播放| 狠狠爱大香蕉| 九九av| 国产日韩精品一区二区三区| 欧美自拍偷拍免费观看| 人妻性爱一区二区| 国产尤物在线三区| 台湾大香蕉99热| 激情五月天综合网| 黄色一区二区秘书性感| 日韩精品人妻| 国产精品另类一区大香蕉| 久久一区,青青青青草视频在线播放| 欧美久久伊人| 伊人网免费视频| 大香蕉狠狠爱| 亚洲清纯唯美| 天天α片| 国产不卡片| 中文字幕在线高清男人的天堂| 18禁无码永久免费无限制| 国产日韩怡红院| 97网址97| 久久精品视频在线观看| 久久久久精| 国产67194| 黑丝自慰喷水网站| 亚洲一区在线观看欧洲 | 无码聚合| 免费?级毛片无码?∨蜜芽试看| 亚洲熟女av中文字幕| 人妻人久久精品中文字幕| 97超碰亚洲| 白丝1区2区3区| 九九成人| 久久99网站| 成人日本视频人妻在线| 国产精品无码av| 国产精品国产自产高清AV| 亚洲码在线中文在线观看| 九九无码| 91综合网站| 丝袜AV一区二区三区| 美女黄色91| 久久久久久中文| 久久久久久久久国产| 少妇色综合| 欧美国产操逼| 任你干在线视频| 肉丝无码中文高清| 青青伊人加勒比海| 久久夜精品一区二区三区| 男人久久精品| 久久久97| 91老熟女| 亚洲福利影院一区久久| 大香蕉伊人75| 色约约一区=区三区| 美女十八禁| 天堂亚洲精品| 亚州欧美在线| 精品视频久久| 久久久久九九九| 综合久久97| 久久成年片色大黄全免费网站| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 超碰超碰超碰超碰的大鸡吧操黑丝袜| 色婷婷A V一二三四区麻豆综合| 97在线观看免费| 97视频播放| 91肉丝|