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

        ?

        基于HTTP1.1的WebSocket協(xié)議的新式網(wǎng)絡(luò)聊天室設(shè)計與研究*

        2018-12-19 01:55:52萬琪偉盧成林
        通信技術(shù) 2018年12期
        關(guān)鍵詞:聊天室身份驗證服務(wù)器端

        萬琪偉,盧成林

        (南昌工程學(xué)院瑤湖學(xué)院,江西 南昌 330099)

        0 引 言

        目前,互聯(lián)網(wǎng)市場的在線通信技術(shù)大多仍為傳統(tǒng)的TCP通信協(xié)議,而WebSocket方興未艾,更能適應(yīng)現(xiàn)代社會發(fā)展的通信需要。本設(shè)計應(yīng)用該技術(shù)設(shè)計搭建網(wǎng)絡(luò)聊天室,彌補了傳統(tǒng)通信的一些缺點,給現(xiàn)代通信架構(gòu)的設(shè)計提供樣本參考。

        1 WeSocket協(xié)議的網(wǎng)絡(luò)聊天室應(yīng)具備的功能

        (1)客戶端自由連接,自由發(fā)言;

        (2)完備的文件轉(zhuǎn)碼機制,使聊天室支持多類型文件的收發(fā)和多狀態(tài)信息的傳輸;

        (3)提供統(tǒng)一處理機制,對外提供開放接口,方便開發(fā)部署應(yīng)用;

        (4)并行異步處理模式,提高并行處理時的效率,構(gòu)建更穩(wěn)定的通信應(yīng)用。

        2 可行性分析

        2.1 HTTP網(wǎng)絡(luò)傳輸協(xié)議

        最早的HTTP網(wǎng)絡(luò)傳輸協(xié)議是HTTP0.9,于1991年發(fā)布。它在網(wǎng)絡(luò)傳輸過程中只傳輸文本內(nèi)容,沒有緩存、身份驗證和錯誤機制。由于傳輸前沒有身份驗證機制,所以其傳輸?shù)膬?nèi)容不安全,有許多方法可以冒充接收方截下這段內(nèi)容。因此,在該協(xié)議的背景下,個人網(wǎng)站和企業(yè)網(wǎng)站的首頁等一類不需要加密的業(yè)務(wù)內(nèi)容應(yīng)運而生。由于私密內(nèi)容不適合在網(wǎng)絡(luò)之間傳輸,因此為了提供更多的安全性,身份驗證和錯誤狀態(tài)機制被添加進HTTP1.0。1992年后,互聯(lián)網(wǎng)發(fā)展迎來了第一個巔峰,各種網(wǎng)絡(luò)技術(shù)應(yīng)用層出不窮,但網(wǎng)絡(luò)間的數(shù)據(jù)傳輸還是基于HTTP1.0協(xié)議,通信技術(shù)的更新使得傳輸速度越來越快,數(shù)據(jù)流量越來越大。而HTTP1.0的身份驗證是一次性驗證,對于頻繁的網(wǎng)絡(luò)請求,身份驗證占據(jù)的帶寬相當(dāng)可觀。于是,HTTP1.1在1997年發(fā)布,該協(xié)議一次驗證之后可以進行多次連接。網(wǎng)速的提高使得通過網(wǎng)絡(luò)傳輸?shù)奈募?nèi)容越來越大,如視頻、音頻、鏡像等壓縮文件。原先的一般處理是將大文件分割成小文件傳輸,最后再合并回大文件,使得文件傳輸復(fù)雜,小文件也可能發(fā)生丟失,導(dǎo)致傳輸?shù)膬?nèi)容不完整。因此,第二代通信技術(shù)HTTP2.0為大文件的傳輸提供了更加完美的解決方案[1]。

        2.2 WebSocket協(xié)議

        WebSocket協(xié)議支持發(fā)布于2013年,在(在受控環(huán)境中運行不受信任的代碼的)客戶端與(選擇加入該代碼的通信的)遠程主機之間進行全雙工通信。用于此的安全模型是Web瀏覽器常用的基于原始的安全模式。協(xié)議包括一個開放的握手和隨后的TCP層上的消息幀。該技術(shù)的目標(biāo)是為基于瀏覽器的需要和服務(wù)器進行雙向通信的(服務(wù)器不能依賴于打開多個HTTP連接(如使用XMLHttpRequest、<iframe>和長輪詢)應(yīng)用程序提供一種通信機制。簡單地說,WebSocket協(xié)議之前,雙向通信是通過不停發(fā)送HTTP請求從服務(wù)器拉取更新來實現(xiàn),導(dǎo)致效率低下,而WebSocket協(xié)議能較好地解決此類問題。

        實現(xiàn)WebSocket連線過程中,需要通過瀏覽器發(fā)出WebSocket連線請求,然后服務(wù)器發(fā)出回應(yīng),這個過程通常稱為“握手”。在WebSocket API,瀏覽器和服務(wù)器只需要做一個握手的動作,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間可以直接進行數(shù)據(jù)的互相傳送。在WebSocket協(xié)議中,實現(xiàn)即時服務(wù)有兩大好處。

        (1)Header容量小

        相互溝通的Header很小,大概只有2 Bytes。

        (2)Server Push提供主動推送服務(wù)

        服務(wù)器的推送。服務(wù)器不再被動接收瀏覽器的請求后才返回數(shù)據(jù),而是在有新數(shù)據(jù)時就主動推送給瀏覽器。

        瀏覽器發(fā)送的Header

        GET/webfin/websocket/HTTP/1.1

        Host:localhost

        Upgrade:websocket

        Connection:Upgrade

        Sec-WebSocket-Key:xqBt3ImNzJbYqRINx EFlkg==

        Origin:http://服務(wù)器地址

        Sec-WebSocket-Version:13

        服務(wù)器回應(yīng)Header

        HTTP/1.1 101 Switching Protocols

        Upgrade:websocket

        Connection:Upgrade

        Sec-WebSocket-Accept:K7DJLdLooIwIG/MOpvWFB3y3FE8=

        3 基于HTTP1.1的WebSocket協(xié)議的新式網(wǎng)絡(luò)聊天室的優(yōu)勢

        傳統(tǒng)的HTTP協(xié)議是無狀態(tài)的,每次請求(Request)都要由客戶端(如瀏覽器)主動發(fā)起,服務(wù)端進行處理后返回response結(jié)果,而服務(wù)端很難主動向客戶端發(fā)送數(shù)據(jù)。對于信息變化不頻繁的Web應(yīng)用來說,它造成的麻煩較小,而對于涉及實時信息的Web應(yīng)用卻帶來了很大不便,如帶有即時通信、實時數(shù)據(jù)、訂閱推送等功能的應(yīng)用。在WebSocket規(guī)范提出前,開發(fā)人員若要實現(xiàn)這些實時性較強的功能,經(jīng)常會使用折中的解決方法:輪詢(Polling)和Comet技術(shù)。其實,Comet技術(shù)本質(zhì)上也是一種輪詢,是一種改進的輪詢[2]。

        記S1為傳統(tǒng)的HTTP協(xié)議規(guī)則(以下簡稱TCP),S2為基于HTTP1.1的WebSocket協(xié)議規(guī)則(以下簡稱WS)。

        使用WS有以下幾點優(yōu)勢:

        (1)建立在TCP協(xié)議之上。

        (2)與HTTP協(xié)議有著良好的兼容性。默認(rèn)端口也是80和443,握手階段采用HTTP協(xié)議。因此,握手時不容易屏蔽,能通過各種HTTP代理服務(wù)器。

        (3)數(shù)據(jù)格式比較輕量,性能開銷小,通信高效。

        (4)可以發(fā)送文本,也可以發(fā)送二進制數(shù)據(jù)。

        (5)沒有同源限制,客戶端可以與任意服務(wù)器通信。

        (6)協(xié)議標(biāo)識符是ws(如果加密,則為wss),服務(wù)器網(wǎng)址就是URL。

        正如自然界中有“物競天擇,適者生存”,一代又一代的通信協(xié)議被提出,隨著時代的發(fā)展又不斷淘汰。技術(shù)的產(chǎn)生和需求是分不開的。根據(jù)社會對即時通信協(xié)議的需求,基于對上述可行性的分析,基于HTTP1.1的WebSocket協(xié)議的新式網(wǎng)絡(luò)聊天室的開發(fā)設(shè)計是一種較合理的選擇。

        4 基于WebSocket的通信技術(shù)分析

        4.1 服務(wù)器端的接收中轉(zhuǎn)核心

        相比于傳統(tǒng)TCP協(xié)議核心,服務(wù)器端增加了一個HTTPRequest的Context連接池。在有客戶端連接請求時,將正確請求壓入Dictionary中實現(xiàn)了長輪詢和有狀態(tài)的雙向連接。新建線程監(jiān)聽此端口或者在有服務(wù)器消息后主動向客戶端推送消息,調(diào)用Dictionary鍵值對找出客戶端口,同時使用.NET提供的WebSocket.State屬性判斷客戶端是否在線,以實現(xiàn)實時雙工通信和離線消息保持處理。

        另外,WebSocket的核心相比于TCP有更大的可設(shè)計性:

        (1)可設(shè)計多樣化網(wǎng)絡(luò)核心存在形式?;?NET,WebSocket可以部署為控制臺,可以部署為Windows窗口程序,可以部署為ASP網(wǎng)站處理程序。在MicroSoft發(fā)布了最新技術(shù)規(guī)范.NET Core后,作為新式的更完美的通信技術(shù),可以部署在支持.NET框架的任何平臺。

        (2)可設(shè)計安全連接和狀態(tài)連接。WebSocket可以通過加載SSL證書應(yīng)用世界主流的數(shù)據(jù)通信加密協(xié)議來保護傳輸數(shù)據(jù)。一次握手可以保持連接狀態(tài),節(jié)約帶寬和性能。

        4.2 客戶端的連接接口

        目前主流的瀏覽器核心均支持WebSocket通信協(xié)議,W3C為客戶端規(guī)定了更加簡潔高效的連接處理API,使得客戶端的設(shè)計可以更簡約和方便。

        開發(fā)平臺CodeVS語言JavaScript

        Window.ws=newWebSocket(‘wss://forexample.com/Handler1.ashx?user=’+$(“#user”).val());

        服務(wù)器端的通信中轉(zhuǎn)是此次研究的核心,也是此次技術(shù)的難點。利用新技術(shù)更新傳統(tǒng)技術(shù),并修復(fù)已知問題使它更符合現(xiàn)代社會需要,需要我們不斷嘗試和研究,不斷更新迭代技術(shù)開發(fā)出更加高效和完備的通信體系[3-4]。

        5 新式網(wǎng)絡(luò)聊天室的設(shè)計過程

        5.1 數(shù)據(jù)傳輸結(jié)構(gòu)

        圖1表述了協(xié)議數(shù)據(jù)從設(shè)計物理層生成,經(jīng)過鏈路處理,使用網(wǎng)絡(luò)協(xié)議進行修飾,最后通過套接字接口傳達到應(yīng)用層的過程。簡言之,應(yīng)用層為消息池,儲存消息為Server和Client所用。

        圖1 協(xié)議內(nèi)容

        5.2 異步編程模式邏輯結(jié)構(gòu)圖

        圖2 表明服務(wù)運行時,服務(wù)器專用線程監(jiān)聽某個應(yīng)用層端口的連接,然后接受連接請求和驗證連接協(xié)議。成功后,在客戶端對應(yīng)用層進行消息傳遞前,服務(wù)器的recv()保持阻塞狀態(tài),send()保持接受外部影響的激活狀態(tài)。在每一次輪詢結(jié)束后,recv()重新阻塞,send()時刻活躍,并對服務(wù)器和客戶端改動做出回應(yīng),實現(xiàn)異步模式。

        圖2 雙工協(xié)議流程

        5.3 邏輯結(jié)構(gòu)

        整個平臺由服務(wù)器端和客戶端組成。服務(wù)器端用來處理各個客戶端發(fā)來的數(shù)據(jù)(聊天消息)和向客戶端分發(fā)聊天消息記錄。每一個聊天室需新建一個類。

        此類需包含以下組件。(1)房間號:用來顯示表示房間ID的字符串組成的標(biāo)識符。(2)成員:應(yīng)使用動態(tài)數(shù)組或者可變長度的堆棧,如果實現(xiàn)1對1聊天室,把成員數(shù)量限制為2即可。(3)端口號:服務(wù)器上描述房間位置的唯一標(biāo)識符,用以封裝IPv4對外接口和客戶端連接服務(wù)端的端點。(4)消息結(jié)構(gòu):成員用戶IP地址(識別單個用戶)、發(fā)送消息的時間、發(fā)送的消息內(nèi)容和其他DIY描述(如個性簽名、頭像等)。(5)成員列表:儲存所有的在線成員,可選添加聊天室管理員。(6)綁定的數(shù)據(jù)庫:將每一條消息結(jié)構(gòu)存入數(shù)據(jù)庫,便于隨時調(diào)出查看。

        至少包含如下方法。(1)獲取歷史聊天記錄。(2)輸出成員列表:獲取在線人數(shù),根據(jù)已連接的IP地址定義單個成員。(3)獲取客戶端消息:將消息結(jié)構(gòu)存入數(shù)據(jù)庫,向所有本房間的客戶端推送消息。(4)創(chuàng)建WebSocket服務(wù)器端監(jiān)聽服務(wù):基于WebSocket協(xié)議的互聯(lián)機制,可以保持客戶端在線,同時監(jiān)聽客戶端狀態(tài),做到身份驗證和消息加密的安全保障,且能夠在有成員的狀態(tài)下活躍,無成員時靜默,最大程度節(jié)約服務(wù)器資源和帶寬。(5)關(guān)閉WebSocket服務(wù):節(jié)省內(nèi)存。

        服務(wù)器類需包括以下組件。(1)聊天室列表棧:儲存和提取各聊天室信息。(2)聊天室工廠類:批量規(guī)范地創(chuàng)建聊天室,將聊天室壓入聊天室列表Stack中。(3)WebSocket服務(wù):向每一個客戶端發(fā)送房間列表或創(chuàng)建房間信息或其他內(nèi)容。(4)其他功能,如多線程支持、日志記錄、錯誤列表。

        客戶端需包括以下功能。(1)WebSocketClient:WebSocket服務(wù)客戶端,用于連接服務(wù)器進行網(wǎng)絡(luò)通信協(xié)議,使用WebSocket協(xié)議的客戶端口和連接基礎(chǔ)。(2)消息處理組件:能夠?qū)磳l(fā)送的消息文本處理,或者對即將發(fā)送的圖片和文件適當(dāng)編碼,使之能用ws協(xié)議傳輸。處理服務(wù)器返回的消息,使之能正常且正確地顯示在客戶端。(3)聊天室接口:獲取聊天室和成員信息,管理聊天室連接,生成聊天室Stack使客戶端能加入多個聊天室。(4)其他功能,如日志記錄、錯誤列表。

        5.4 算法結(jié)構(gòu)

        聊天室包含的主要算法如下。

        開發(fā)環(huán)境:CodeVS,語言JavaScript

        (1)圖片轉(zhuǎn)base:64算法

        function getBase64Image(img){

        var base64, base;

        var canvas = document.createElement(“canvas”);

        canvas.width=img.width;

        canvas.height=img.height;

        var ctx=canvas.getContext(“2d”);

        ctx.drawImage(img,0,0,img.width,img.height);

        base=canvas.toDataURL(“image/png”);

        base64 = base.toString().substr(base.toString().indexOf(“,”)+1);

        return base64;

        }

        (2)小文檔壓縮二進制算法

        該算法可選支持,具體取決于對消息的支持程度。

        (3)SHA1算法

        function count(SecWebSocketKey){

        if(!(SecWebSocketKey==””)){

        var shaObj=newjsSHA(“SHA1”,”TEXT”,{“n umRounds”:1});

        shaObj.update(SecWebSocketKey+”258EAFA5-E914-47DA-95CA-C5AB0DC85B11”);

        return shaObj.getHash(“B64”);

        else return -1;

        }

        可安裝SSL證書,以安全化雙工連接。

        6 結(jié) 語

        本設(shè)計中服務(wù)器和客戶端的結(jié)構(gòu)清晰,條理鮮明,且完整地基于WebSocket協(xié)議的使用及拓展,服務(wù)器及客戶端都擁有獨立的工作形式,跨越了兩個平臺。該研究應(yīng)用范圍不僅適用于小型局域互聯(lián)網(wǎng)絡(luò)建設(shè),隨著社會對即時通信需求的與日劇增,可延伸至其他領(lǐng)域。

        猜你喜歡
        聊天室身份驗證服務(wù)器端
        多多熊聊天室
        新少年(2023年10期)2023-10-24 07:47:12
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        HID Global收購Arjo Systems擴大政府身份驗證業(yè)務(wù)
        歌劇聊天室 洗洗曬曬,又是新一天
        歌劇(2017年4期)2017-05-17 04:07:29
        歌劇聊天室 永遠盛放的雪絨花
        歌劇(2017年3期)2017-05-17 04:06:47
        在Windows中安裝OpenVPN
        更安全的雙重密碼保護
        CHIP新電腦(2015年3期)2015-04-02 17:55:46
        身份驗證中基于主動外觀模型的手形匹配
        ASP.NET中的Forms身份驗證的研究
        網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
        亚洲av无一区二区三区久久| 亚洲一区二区丝袜美腿| 人妖在线一区二区三区| 亚洲精品国产精品系列| 精品黄色国产一区二区| 中国黄色一区二区三区四区| 蜜臀av无码人妻精品| 少妇内射视频播放舔大片| 两个人免费视频大全毛片| 午夜视频一区二区三区播放| 亚洲日韩久久综合中文字幕| 蜜臀av免费一区二区三区| 青青草针对华人超碰在线| 精品人妻av区二区三区| 性色av色香蕉一区二区蜜桃| 最新日本一道免费一区二区| 国产黄页网站在线观看免费视频 | 亚洲一二三四五中文字幕| 性无码一区二区三区在线观看| 黑人巨大白妞出浆| 国产亚洲一本大道中文在线| 免费人成黄页网站在线观看国产 | 亚洲av综合av成人小说| 97超级碰碰人妻中文字幕| 亚洲粉嫩av一区二区黑人| 91日韩东京热中文字幕| 日本午夜精品理论片a级app发布| 国产精品无码片在线观看| 偷拍美女一区二区三区视频| 免费不卡无码av在线观看| 色窝窝免费播放视频在线| 无码人妻少妇久久中文字幕| 亚洲av综合色一区二区| 精品国产一二三产品区别在哪| 亚洲乱码国产一区三区| 无码a级毛片免费视频内谢| 精品亚洲一区中文字幕精品| 人人妻一区二区三区| 毛片毛片免费看| 扒下语文老师的丝袜美腿| 亚洲第一网站免费视频|