• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于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ò)聊天室,彌補(bǔ)了傳統(tǒng)通信的一些缺點(diǎn),給現(xiàn)代通信架構(gòu)的設(shè)計提供樣本參考。

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

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

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

      (3)提供統(tǒng)一處理機(jī)制,對外提供開放接口,方便開發(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)容,沒有緩存、身份驗證和錯誤機(jī)制。由于傳輸前沒有身份驗證機(jī)制,所以其傳輸?shù)膬?nèi)容不安全,有許多方法可以冒充接收方截下這段內(nèi)容。因此,在該協(xié)議的背景下,個人網(wǎng)站和企業(yè)網(wǎng)站的首頁等一類不需要加密的業(yè)務(wù)內(nèi)容應(yīng)運(yùn)而生。由于私密內(nèi)容不適合在網(wǎng)絡(luò)之間傳輸,因此為了提供更多的安全性,身份驗證和錯誤狀態(tài)機(jī)制被添加進(jìn)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é)議一次驗證之后可以進(jìn)行多次連接。網(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)境中運(yùn)行不受信任的代碼的)客戶端與(選擇加入該代碼的通信的)遠(yuǎn)程主機(jī)之間進(jìn)行全雙工通信。用于此的安全模型是Web瀏覽器常用的基于原始的安全模式。協(xié)議包括一個開放的握手和隨后的TCP層上的消息幀。該技術(shù)的目標(biāo)是為基于瀏覽器的需要和服務(wù)器進(jìn)行雙向通信的(服務(wù)器不能依賴于打開多個HTTP連接(如使用XMLHttpRequest、<iframe>和長輪詢)應(yīng)用程序提供一種通信機(jī)制。簡單地說,WebSocket協(xié)議之前,雙向通信是通過不停發(fā)送HTTP請求從服務(wù)器拉取更新來實(shí)現(xiàn),導(dǎo)致效率低下,而WebSocket協(xié)議能較好地解決此類問題。

      實(shí)現(xiàn)WebSocket連線過程中,需要通過瀏覽器發(fā)出WebSocket連線請求,然后服務(wù)器發(fā)出回應(yīng),這個過程通常稱為“握手”。在WebSocket API,瀏覽器和服務(wù)器只需要做一個握手的動作,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間可以直接進(jìn)行數(shù)據(jù)的互相傳送。在WebSocket協(xié)議中,實(shí)現(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ù)端進(jìn)行處理后返回response結(jié)果,而服務(wù)端很難主動向客戶端發(fā)送數(shù)據(jù)。對于信息變化不頻繁的Web應(yīng)用來說,它造成的麻煩較小,而對于涉及實(shí)時信息的Web應(yīng)用卻帶來了很大不便,如帶有即時通信、實(shí)時數(shù)據(jù)、訂閱推送等功能的應(yīng)用。在WebSocket規(guī)范提出前,開發(fā)人員若要實(shí)現(xiàn)這些實(shí)時性較強(qiáng)的功能,經(jīng)常會使用折中的解決方法:輪詢(Polling)和Comet技術(shù)。其實(shí),Comet技術(shù)本質(zhì)上也是一種輪詢,是一種改進(jìn)的輪詢[2]。

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

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

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

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

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

      (4)可以發(fā)送文本,也可以發(fā)送二進(jìn)制數(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中實(shí)現(xiàn)了長輪詢和有狀態(tài)的雙向連接。新建線程監(jiān)聽此端口或者在有服務(wù)器消息后主動向客戶端推送消息,調(diào)用Dictionary鍵值對找出客戶端口,同時使用.NET提供的WebSocket.State屬性判斷客戶端是否在線,以實(shí)現(xiàn)實(shí)時雙工通信和離線消息保持處理。

      另外,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é)議來保護(hù)傳輸數(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ù)的難點(diǎn)。利用新技術(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é)議進(jìn)行修飾,最后通過套接字接口傳達(dá)到應(yīng)用層的過程。簡言之,應(yīng)用層為消息池,儲存消息為Server和Client所用。

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

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

      圖2 表明服務(wù)運(yùn)行時,服務(wù)器專用線程監(jiān)聽某個應(yīng)用層端口的連接,然后接受連接請求和驗證連接協(xié)議。成功后,在客戶端對應(yīng)用層進(jìn)行消息傳遞前,服務(wù)器的recv()保持阻塞狀態(tài),send()保持接受外部影響的激活狀態(tài)。在每一次輪詢結(jié)束后,recv()重新阻塞,send()時刻活躍,并對服務(wù)器和客戶端改動做出回應(yīng),實(shí)現(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ù)組或者可變長度的堆棧,如果實(shí)現(xiàn)1對1聊天室,把成員數(shù)量限制為2即可。(3)端口號:服務(wù)器上描述房間位置的唯一標(biāo)識符,用以封裝IPv4對外接口和客戶端連接服務(wù)端的端點(diǎn)。(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)機(jī)制,可以保持客戶端在線,同時監(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ù)器進(jìn)行網(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)小文檔壓縮二進(jìn)制算法

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

      (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ù)器及客戶端都擁有獨(dú)立的工作形式,跨越了兩個平臺。該研究應(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擴(kuò)大政府身份驗證業(yè)務(wù)
      歌劇聊天室 洗洗曬曬,又是新一天
      歌劇(2017年4期)2017-05-17 04:07:29
      歌劇聊天室 永遠(yuǎn)盛放的雪絨花
      歌劇(2017年3期)2017-05-17 04:06:47
      在Windows中安裝OpenVPN
      更安全的雙重密碼保護(hù)
      CHIP新電腦(2015年3期)2015-04-02 17:55:46
      身份驗證中基于主動外觀模型的手形匹配
      ASP.NET中的Forms身份驗證的研究
      網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
      大田县| 江安县| 宜章县| 定边县| 张北县| 运城市| 孟州市| 五指山市| 衡水市| 胶南市| 万州区| 绥阳县| 杭锦旗| 屏南县| 乌兰察布市| 通化县| 翼城县| 个旧市| 罗平县| 锦屏县| 获嘉县| 烟台市| 任丘市| 翁牛特旗| 桂东县| 哈尔滨市| 新化县| 孟州市| 湄潭县| 罗江县| 甘孜县| 曲松县| 山东| 荣昌县| 龙川县| 南丹县| 南京市| 吉林市| 左权县| 宜春市| 游戏|