成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

socket.io原理和實(shí)戰(zhàn)

ivyzhang / 2314人閱讀

摘要:就是為了解決這一問題產(chǎn)生的,現(xiàn)在已經(jīng)寫入標(biāo)準(zhǔn),主流瀏覽器基本支持。

由于最近寫項(xiàng)目要使用socekt.io技術(shù),于是研究了一段時間,把自己早期學(xué)習(xí)階段寫的小游戲改造了一下,變成了一個比較完整的小程序。點(diǎn)擊這里可以體驗(yàn)游戲,建議使用手機(jī)模式查看,也可以下載打包好的webapp,安卓版已上架酷安市場,掃碼可下載體驗(yàn):

整個東西其實(shí)很簡單,游戲界面使用canvas繪制,AI算法來自慕課網(wǎng)學(xué)習(xí)視頻,聯(lián)機(jī)對戰(zhàn)使用socket.io實(shí)現(xiàn)實(shí)時推送,完整代碼已經(jīng)開源,點(diǎn)擊傳送,喜歡的給個star,歡迎fork,更歡迎指出不足,提出建議。

關(guān)于socket.io

在我接觸過的小型類庫框架中,socket.io絕對是最驚艷的一個,它可以只使用幾行代碼就能實(shí)現(xiàn)簡單的聊天小程序。一直以來我都在想找機(jī)會應(yīng)用到開發(fā)中,最近在寫項(xiàng)目的時候剛好有需求了。在正式使用之前先做了一點(diǎn)小研究,又寫了一個小的demo,在此記錄一點(diǎn)心得。

什么是socket.io

Socket.IO是一個支持基于事件的實(shí)時雙向通信的類庫,它可以在任何平臺,瀏覽器或設(shè)備上工作,同時在可靠性和速度方面有保證,可以構(gòu)建實(shí)時性很強(qiáng)的應(yīng)用。它兼容性極好,對于不兼容的環(huán)境采用降級策略,支持的瀏覽器最低達(dá)IE5.5。

為什么要有socket.io,它是怎么工作的,為什么它能夠?qū)崿F(xiàn)實(shí)時通訊。想要理解socket.io,還要從網(wǎng)絡(luò)基礎(chǔ)來談起。

從輪詢到websocket

先來看一個比較新的網(wǎng)絡(luò)應(yīng)用層協(xié)議:websocket。在傳統(tǒng)網(wǎng)絡(luò)應(yīng)用中,大多數(shù)場景下都在使用http協(xié)議,那么有沒有http處理不了或者不容易處理的問題呢?考慮一個場景,如果服務(wù)器想要給客戶端推送消息,應(yīng)該如何實(shí)現(xiàn)。在http協(xié)議之下,網(wǎng)絡(luò)通信是只能由客戶端向服務(wù)端發(fā)起的,服務(wù)器是沒辦法主動向客戶端推送消息的,客戶端要想接收服務(wù)器的消息,就得不停地向服務(wù)器發(fā)送請求,這種方式叫輪詢。輪詢的方式開銷是很大的,因?yàn)椴还苡袥]有消息,客戶端總是要去問服務(wù)器,不但低效還浪費(fèi)資源,顯然這不是一個很好的解決方案。還有一種長輪詢,客戶端發(fā)送請求之后一直等,直到服務(wù)器有返回再建立新的連接。同樣也占用著不必要的資源。這一切的根源就是沒有客戶端的請求服務(wù)器是沒辦法和客戶端通信的,這就是單向通信的缺陷,我們需要一種能夠?qū)崿F(xiàn)客戶端服務(wù)端雙向通信的技術(shù)。

websocket就是為了解決這一問題產(chǎn)生的,現(xiàn)在已經(jīng)寫入標(biāo)準(zhǔn),主流瀏覽器基本支持。websocket同樣是建立在TCP之上的,請求協(xié)議為ws或wss(加密)后面地址書寫和http基本沒區(qū)別,像下面這樣

ws://server.example.com/chat

這就是一次websocket請求,請求頭大概是這樣的:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

看起來和http很像,因?yàn)樗帐蛛A段是要借助http協(xié)議的,不過在請求中加入了Upgrade相關(guān)內(nèi)容,而相應(yīng)信息是這樣的:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

服務(wù)端也響應(yīng)了Upgrade,此時,已經(jīng)和http沒什么關(guān)系了,協(xié)議升級后雙方建立的就是websocket連接了。只建立了一次連接,現(xiàn)在客戶端和服務(wù)端可以實(shí)現(xiàn)應(yīng)用層全雙工通信了,整個過程如圖所示:

socket.io的實(shí)現(xiàn)

socket.io想實(shí)現(xiàn)雙向通信,當(dāng)然websocket是必不可少的技術(shù)了,不過socket.io不僅僅是websocket的封裝,在不支持websocket的環(huán)境中,socket.io還有多種輪詢解決方案,確保它能夠正常運(yùn)行。

socket.io把看起來很復(fù)雜,很難實(shí)現(xiàn)的工作變得很容易,它的api很簡潔,在很多實(shí)時場景下都很有用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92725.html

相關(guān)文章

  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    stormgens 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    mylxsw 評論0 收藏0
  • Nodejs爬蟲實(shí)戰(zhàn)項(xiàng)目之鏈家

    摘要:很基礎(chǔ),不喜勿噴轉(zhuǎn)載注明出處爬蟲實(shí)戰(zhàn)項(xiàng)目之鏈家效果圖思路爬蟲究竟是怎么實(shí)現(xiàn)的通過訪問要爬取的網(wǎng)站地址,獲得該頁面的文檔內(nèi)容,找到我們需要保存的數(shù)據(jù),進(jìn)一步查看數(shù)據(jù)所在的元素節(jié)點(diǎn),他們在某方面一定是有規(guī)律的,遵循規(guī)律,操作,保存數(shù)據(jù)。 說明 作為一個前端界的小學(xué)生,一直想著自己做一些項(xiàng)目向全棧努力。愁人的是沒有后臺,搜羅之后且學(xué)會了nodejs和express寫成本地的接口給前端頁面調(diào)用...

    noONE 評論0 收藏0
  • Nodejs爬蟲實(shí)戰(zhàn)項(xiàng)目之鏈家

    摘要:很基礎(chǔ),不喜勿噴轉(zhuǎn)載注明出處爬蟲實(shí)戰(zhàn)項(xiàng)目之鏈家效果圖思路爬蟲究竟是怎么實(shí)現(xiàn)的通過訪問要爬取的網(wǎng)站地址,獲得該頁面的文檔內(nèi)容,找到我們需要保存的數(shù)據(jù),進(jìn)一步查看數(shù)據(jù)所在的元素節(jié)點(diǎn),他們在某方面一定是有規(guī)律的,遵循規(guī)律,操作,保存數(shù)據(jù)。 說明 作為一個前端界的小學(xué)生,一直想著自己做一些項(xiàng)目向全棧努力。愁人的是沒有后臺,搜羅之后且學(xué)會了nodejs和express寫成本地的接口給前端頁面調(diào)用...

    MartinDai 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<