亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種多模融合技術(shù)的即時通訊解決方案

        2022-05-29 19:43:15蘇成武
        電腦知識與技術(shù) 2022年12期

        蘇成武

        摘要:本文針對網(wǎng)絡即時通信IM(Instant Messenger)存在的多渠道(不同瀏覽器、不同客戶端)、多協(xié)議(HTTP、Flash XMLSocekt、WebSocket)接入困難問題,設計了一個多模融合即時消息服務,使各業(yè)務系統(tǒng)以統(tǒng)一的接口接入各渠道及各協(xié)議,同時可以不在修改業(yè)務系統(tǒng)的前提下接入新的渠道及協(xié)議。實踐運行表明,本系統(tǒng)具有良好的易用性和可擴展性,已在多個業(yè)務系統(tǒng)推廣使用。

        關鍵詞:IM;網(wǎng)絡即時通信;即時消息服務

        中圖分類號:TP393? ? ? 文獻標識碼:A

        文章編號:1009-3044(2022)12-0035-03

        開放科學(資源服務)標識碼(OSID):

        隨著移動互聯(lián)網(wǎng)的發(fā)展,用戶利用手機、電腦上網(wǎng)的時間越來越多,以“社區(qū)(Community)” “內(nèi)容(Contenet)”“商務(Commerce)”為主要特征的網(wǎng)絡即時通信IM(Instant Messenger),越來越受到用戶的重視。網(wǎng)絡即時通信使得用戶的溝通更加方便、快捷,使用戶真正有了天涯若比鄰的“地球村”的感覺。

        用戶可通過瀏覽器(IE、Chrome、Firefox、Safari、Edge)、Windows桌面軟件、Linux桌面軟件、MAC桌面軟件、安卓App、蘋果App等不同的渠道訪問業(yè)務系統(tǒng)。由于歷史原因,各渠道實現(xiàn)網(wǎng)絡即時通訊的技術(shù)差異較大,如Chrome、Firefox、Safari、Edge等較新的瀏覽器支持HTML5標準中的WebSocket,可通過WebSocket實現(xiàn)網(wǎng)絡即時通訊。較老版本的IE瀏覽器只能通過輪詢方式或Flash XMLSocekt實現(xiàn)即時通訊。而Windows桌面軟件、Linux桌面軟件、MAC桌面軟件、安卓App、蘋果App等需要通過Socket實現(xiàn)網(wǎng)絡即時通訊。如果業(yè)務系統(tǒng)負責每一個渠道的網(wǎng)絡即時通訊接入,無疑會導致業(yè)務系統(tǒng)過于復雜,不利于不同業(yè)務系統(tǒng)之間代碼共享,同時增加新的協(xié)議接入時,會破壞原有的業(yè)務系統(tǒng)。

        基于以上的問題,本文提出了一種多模融合技術(shù)的即時通訊解決方案,建立一個多模融合即時消息服務,接收不同渠道的客戶端連接,并從連接當中取出一定數(shù)量的字符,與各對應的協(xié)議報文頭進行字符匹配,從而識別連接渠道客戶端所使用的協(xié)議,并按協(xié)議格式解析報文數(shù)據(jù)。再通過統(tǒng)一的協(xié)議與業(yè)務系統(tǒng)進行通訊,并將解析出的數(shù)據(jù)傳遞給業(yè)務系統(tǒng)進行處理,并可將業(yè)務系統(tǒng)返回的結(jié)果推送給各渠道的客戶端。通過多模融合即時消息服務可實現(xiàn)與業(yè)務系統(tǒng)的統(tǒng)一通訊,即使增加新的渠道客戶端協(xié)議,只用修改多模融合即時消息服務,實現(xiàn)了業(yè)務與即時消息能力的解耦。當連接海量用戶時,只需部署多套模融合即時消息服務即可。

        1 主要內(nèi)容

        基于EPOLL技術(shù)實現(xiàn)高性能的多模融合即時消息服務,通過此服務,可以實現(xiàn)不同渠道不同協(xié)議的接入,并為后臺業(yè)務系統(tǒng)提供統(tǒng)一的接口。可以降低業(yè)務系統(tǒng)代碼的復雜度,并可實現(xiàn)不同業(yè)務系統(tǒng)即時消息的功能復用。

        本解決方案的內(nèi)容主要分為以下幾個方面:

        1)協(xié)議識別器:通過關鍵字符的匹配,識別出當前渠道客戶端所采用的協(xié)議,為后續(xù)的數(shù)據(jù)處理和結(jié)果返回提供必要的信息,本設計可自動識別出HTTP、Flash XMLSocekt、WebSocket等協(xié)議。

        2)協(xié)議解碼器:實現(xiàn)HTTP、Flash XMLSocekt、WebSocket等協(xié)議的解碼器,從傳輸協(xié)議里面解析出數(shù)據(jù)報文供下一步處理。

        3)協(xié)議編碼器:實現(xiàn)HTTP、Flash XMLSocekt、WebSocket等協(xié)議的編碼器,將業(yè)務系統(tǒng)或心跳包等模塊返回的結(jié)果數(shù)據(jù)按相應的協(xié)議封裝并返回給渠道客戶端。

        4)多模融合框架:開發(fā)統(tǒng)一的多模融合框架,進行服務端口監(jiān)聽并處理網(wǎng)絡事件(采用EPOLL實現(xiàn)高性能網(wǎng)絡事件處理)。同時提供統(tǒng)一的接口,可支持不同的協(xié)議識別器、協(xié)議解碼器、協(xié)議編碼器接入多模融合框架。

        5)心跳檢測:通過定時向渠道客戶端和業(yè)務系統(tǒng)發(fā)送心跳包,可剔除已經(jīng)異常斷開的連接,保證連接的有效性。

        6)開放SDK:向業(yè)務系統(tǒng)和渠道客戶端提供建立連接、獲取數(shù)據(jù)、發(fā)送數(shù)據(jù)、斷開連接等接口。

        2 總體架構(gòu)設計

        渠道客戶端集成開放SDK,向多模融合即時消息服務發(fā)起連接請求并攜帶報文數(shù)據(jù)。多模融合即時消息服務的多模融合框架收到報文后調(diào)用協(xié)議識別器,識別出渠道客戶端所使用協(xié)議。將協(xié)議報文傳給相應的解碼器進行解碼,解碼出的數(shù)據(jù)通過多模融合框架傳輸給業(yè)務系統(tǒng)并接收業(yè)務系統(tǒng)返回的數(shù)據(jù),經(jīng)過協(xié)議編碼器編碼后將數(shù)據(jù)返回給渠道客戶端。同時多模融合即時消息服務通過心跳檢測模塊檢測,定時向渠道客戶端和業(yè)務系統(tǒng)發(fā)送心跳包以檢測其是否存活。

        3 各模塊詳細設計

        3.1 多模融合框架設計

        多模融合即時消息服務在啟動時調(diào)用多模融合框架進行初始化。多模融合框架讀取配置文件,并監(jiān)聽配置文件配置的網(wǎng)絡端口,再通過EPOLL事件驅(qū)動機制實現(xiàn)與渠道客戶端及業(yè)務系統(tǒng)的網(wǎng)絡通訊。同時初始化一個哈希表,用于協(xié)議解碼器和協(xié)議編碼器的注冊,以便識別出協(xié)議后可以快速查找到解碼器和編碼器并對網(wǎng)絡報文進行編碼和解碼,編解碼器需一一對應,一個解碼器只對應且必須對應一個編碼器。

        3.1.1 EPOLL事件驅(qū)動機制

        EPOLL是Linux提供的高性能網(wǎng)絡事件驅(qū)動機制,可以使應用程序支持海量的用戶接入。EPOLL是在SELECT事件驅(qū)動機制上發(fā)展而來,SELECT事件驅(qū)動機制需程序每次將所有待監(jiān)聽的SOCKET傳入內(nèi)核,內(nèi)核在某一SOCKET出現(xiàn)讀、寫、關閉等事件時,再將事件返回給應用程序,應用程序再通過遍歷所有SOCKET來判斷是否發(fā)生相關的事件。應用程序每一輪處理,都要向內(nèi)核傳遞所有SOCKET,同時發(fā)生事件時要遍歷所有的SOCKET,性能較低。而EPOLL則當有新的SOCKET時才告知內(nèi)核需監(jiān)聽此SOCKET,同時有讀、寫、關閉等事件時內(nèi)核只會將發(fā)生事件的SOCKET通知應用程序,從而減少內(nèi)核與應用程序的數(shù)據(jù)交換及SOCKET的遍歷,支持海量用戶接入[1]。

        3.1.2 哈希表

        哈希表是一種數(shù)據(jù)結(jié)構(gòu),存儲KEY-VALUE值。通過哈希函數(shù)將KEY值映射成長整型的HASHCODE,將此HASHCODE作為VALUE值存儲的位置(數(shù)組索引),當不同KEY值映射到同一個存儲位置時,通過雙向鏈表來存儲VALUE值。只要哈希函數(shù)合理,在KEY值分布較稀疏的情況下,哈希表有較好的查詢性能(O(1)的時間復雜度),通過哈希函數(shù)可以一次定位到對應的VALUE值[5]。

        3.2 協(xié)議識別器設計

        協(xié)議識別器是多模融合即時消息服務核心組件,只有準確識別出渠道客戶端所使用的協(xié)議,才能進行下一步處理。協(xié)議識別器在有渠道客戶端進行連接并接收第一個報文數(shù)據(jù)時,通過分析報文頭部數(shù)據(jù)的關鍵字符并根據(jù)核心邏輯識別出對應的協(xié)議,并解析報文頭的數(shù)據(jù)(如HTTP頭部)與當前渠道客戶端連接進行關聯(lián),為下一步處理做好充分準備。下表列出了識別HTTP、Flash XMLSocekt、WebSocket三種不同協(xié)議報文頭部關鍵字符和核心邏輯。

        3.3 解碼器和編碼器設計

        解碼器和編碼器需一一對應,即一個解碼器只對應且必須對應一個編碼器,因此解碼器和編碼器應在一起設計。解碼器其核心內(nèi)容根據(jù)協(xié)議格式解碼出實際傳輸?shù)臄?shù)據(jù)供業(yè)務系統(tǒng)使用,編碼器的作用主要是將業(yè)務系統(tǒng)返回結(jié)果按協(xié)議格式進行封裝并返回給渠道客戶端。

        3.3.1 HTTP解碼器/編碼器設計

        HTTP解碼器/編碼器基于HTTP協(xié)議[3]進行了擴展,改變HTTP協(xié)議的一問一答形式,雙方均可以隨時通過HTTP請求或響應報文發(fā)送數(shù)據(jù)給對方。渠道客戶端發(fā)送信息時使用HTTP請求報文(解碼器),多模融合即時消息服務返回消息時使用HTTP響應報文(編碼器)。

        1)解碼器報文

        請求行:發(fā)送post請求并指明使用http1.1版本。

        請求頭部:第二行至第六行攜帶相應的頭部,如標注報文長度等。

        空行:請求頭部和請求數(shù)據(jù)之間的間隙。

        請求數(shù)據(jù):即時通訊攜帶的報文數(shù)據(jù)。

        2)編碼器報文

        狀態(tài)行:指明HTTP協(xié)議版本號及狀態(tài)碼、狀態(tài)消息,如上例中HTTP版本為1.1,狀態(tài)碼為200,狀態(tài)消息為(ok)。

        消息報頭:攜帶客戶端要使用的一些附加信息。

        空行:消息報頭與響應正文后面的空行是必須的。

        響應正文:服務器返回給客戶端的文本信息,空行后面的html部分為響應正文。

        3.3.2 Flash XMLSocekt解碼器/編碼器設計

        Flash XMLSocekt在建立連接后第一個數(shù)據(jù)報文發(fā)送前,需進行沙箱和安全策略認證。具體為Flash建立連接后發(fā)送一個字符串,內(nèi)容為 ""(多模融合即時消息服務通過此字段識別Flash XMLSocekt協(xié)議),并等待返回安全策略XML。多模融合即時消息服務解析出此連接前幾個字符是后返回 字符后,認證通過,即可進行正常的數(shù)據(jù)報文通訊[2]。

        在通過沙箱和安全策略認證后,每一個請求報文首先發(fā)送兩個字節(jié)的報文長度,接下來的字節(jié)即為報文數(shù)據(jù),具體報文格式由各業(yè)務系統(tǒng)自行定義(解碼器和編碼器發(fā)送的數(shù)據(jù)報文格式完全一致,只是發(fā)送的方向不一樣)。下圖為有兩個數(shù)據(jù)報文的示例:

        3.3.3 WebSocekt解碼器/編碼器設計

        按照RFC標準,WebSocket的建立需要借助于HTTP,其流程為:渠道客戶端發(fā)一個HTTP GET請求(這個請求只包含一些頭部)攜帶升級為WebSocket的頭部[4]標識到服務端,服務端確認后,渠道客戶端與服務端就可以按WebSocket消息幀(WebSocekt解碼器和編碼器均按此消息幀格式封裝通信)進行通信。

        3.4 心跳檢測設計

        多模融合即時消息服務定時向渠道客戶端和業(yè)務系統(tǒng)發(fā)送心跳包報文,如果規(guī)定的時間內(nèi)(可通過配置文件配置)收到渠道客戶端或業(yè)務系統(tǒng)的回復報文,則認為連接正常,否則從連接信息清單里剔除無效的連接。具體做法為當渠道客戶端或業(yè)務系統(tǒng)建立連接成功后,多模融合即時消息服務為每一個渠道客戶端或業(yè)務系統(tǒng)建立連接信息,并初始化一個字段最后讀寫時間為當前時間,在后續(xù)收到或發(fā)送數(shù)據(jù)時均更新最后讀寫時間字段。同時多模融合即時消息服務建立系統(tǒng)定時任務,每隔5秒鐘遍歷一次連接信息,當某一個連接最后讀寫時間超過一定的時長后,則發(fā)送心跳包報文。

        3.5 開放SDK設計

        開放SDK主要功能是為渠道客戶端和業(yè)務系統(tǒng)提供接入多模融合即時消息服務并進行相關接口功能API的調(diào)用。為渠道客戶端主要提供C、JAVA、JavaScript、Flash等不同語言版本。為業(yè)務系統(tǒng)主要提供C、JAVA等不同語言版本。主要接口清單如下:

        1)連接建立:與多模融合即時消息服務進行連接,需輸入?yún)?shù)業(yè)務系統(tǒng)標識、渠道客戶端ID、服務URL,輸出結(jié)果為連接是否成功、當前連接TOKEN、連接結(jié)果描述。

        2)發(fā)送數(shù)據(jù):通過多模融合即時消息服務向業(yè)務系統(tǒng)或另一個渠道客戶端發(fā)送數(shù)據(jù),需要輸入對端標識(業(yè)務系統(tǒng)標識或連接TOKEN)、數(shù)據(jù)(JSON字符串),輸出結(jié)果為是否發(fā)送成功。

        3)接收數(shù)據(jù):通過回調(diào)方法的行式向渠道客戶端返回接收到的JSON字符串,具體JSON里面的字段按業(yè)務需要進行定制。

        4)斷開連接:斷開與多模融合即時消息服務的連接,需輸入的參數(shù)為當前連接TOKEN,輸出結(jié)果為空。斷開連接后此連接將釋放不可用。

        4 結(jié)語

        本文主要針對網(wǎng)絡即時通信的多渠道(不同瀏覽器、不同客戶端)、多協(xié)議(HTTP、Flash XMLSocekt、WebSocket)的統(tǒng)一接入進行分析和設計。采用EPOLL事件驅(qū)動機制實現(xiàn)高性能網(wǎng)絡即時通信,同時基于哈希表的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了不同協(xié)議的解碼器及解碼器的接入,保證平臺的松耦合性、高可靠性和后期可維護性。本文針對目前網(wǎng)絡即時通信的痛點(多渠道、多協(xié)議接入工作量大,耗時長)進行了分析,并且這些痛點在本設計的系統(tǒng)中得到了有效的解決與改善?,F(xiàn)階段基本上達到了設計目標,實現(xiàn)了多模融合即時消息服務的主要內(nèi)容。同時本系統(tǒng)在實時性、可用性、易用性等方面都達到了良好的效果,在一定程度上解決了各業(yè)務系統(tǒng)接入即時通信的工作量大,耗時長,等諸多痛點。本系統(tǒng)可以較為明顯地為各業(yè)務系統(tǒng)進行服務,節(jié)省開發(fā)人員的時間和精力,可以在一定程度上推動網(wǎng)絡即時通信的變革。

        參考文獻:

        [1] WarrenW Gay.實戰(zhàn)Linux Socket 編程[M].詹俊鵠,譯.西安:西安電子科技大學出版社,2002.

        [2] [加拿大]班得遜.Adobe Flex 3高級編程[M].北京:清華大學出版社,2011.

        [3] David Gourley,Brian Totty.HTTP權(quán)威指南[M].陳涓,趙振平,譯.北京:人民郵電出版社,2012.

        [4] 齊華,李佳,劉軍.基于Websocket的消息實時推送設計與實現(xiàn)[J].微處理機,2016,37(3):36-39,43.

        [5] 嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學出版社,1997.

        【通聯(lián)編輯:張薇】

        3亚洲日韩在线精品区| 秘书边打电话边被躁bd视频| 一二三四在线观看免费视频| 国产精品九九九无码喷水| av在线网站手机播放| 亚洲一区第二区三区四区| 不卡av电影在线| 国产精品久久久av久久久| 亚洲综合综合在线| 日韩av一区二区蜜桃| 日韩av午夜在线观看| 国产精品久久婷婷六月丁香| 91久久国产综合精品| 女同亚洲一区二区三区精品久久| 白嫩丰满少妇av一区二区| 99精品一区二区三区无码吞精| 中文字幕久无码免费久久 | 亚洲av高清一区三区三区| 精品熟人妻一区二区三区四区不卡| 边做边流奶水的人妻| 中文字幕无码免费久久99| 永久免费看黄网站性色| 国产a级三级三级三级| 最近免费中文字幕| 免费大学生国产在线观看p | 少妇无码太爽了在线播放| 国产成人精品999在线观看| 亚洲国产综合专区在线电影| 亚洲av午夜福利精品一区不卡| 国产精品9999久久久久仙踪林| 岛国av无码免费无禁网站下载| 少妇爽到爆视频网站免费| 91自拍视频国产精品| 日日摸天天摸人人看| 欧美中文字幕在线看| 中文字幕人妻av一区二区| 中文字幕亚洲精品无码| 久久精品国产精品亚洲毛片| 久久国产劲爆内射日本| 91精品亚洲成人一区二区三区| 日韩人妻无码一区二区三区|