日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
對(duì)Websocket完全不懂,但又想搞個(gè)聊天室,行嗎?

本文轉(zhuǎn)載自微信公眾號(hào)「勾勾的前端世界」,作者xilingls。轉(zhuǎn)載本文請(qǐng)聯(lián)系勾勾的前端世界公眾號(hào)。

創(chuàng)新互聯(lián)建站專注于巴林右旗網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供巴林右旗營(yíng)銷型網(wǎng)站建設(shè),巴林右旗網(wǎng)站制作、巴林右旗網(wǎng)頁(yè)設(shè)計(jì)、巴林右旗網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造巴林右旗網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供巴林右旗網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

回憶以下上一篇內(nèi)容:《有了 HTTP 協(xié)議,為什么還需要 Websocket?》,了解一下 Websocket 的特點(diǎn)和通信原理,我們接著來(lái)看 Websocket 服務(wù)端與客戶端實(shí)現(xiàn)。

Websocket 服務(wù)端與客戶端實(shí)現(xiàn)

經(jīng)過(guò)前面對(duì)通信過(guò)程的梳理,我們將 WebSocket 通信的基本機(jī)制已經(jīng)說(shuō)的差不多了,為了方便你快速進(jìn)入實(shí)戰(zhàn)階段,我們暫時(shí)放棄純手寫實(shí)現(xiàn),直接選擇使用老牌的 WebSocket 庫(kù): WebSocket-Nodehttps://github.com/theturtle32/WebSocket-Node

簡(jiǎn)單介紹一下 WebSocket-Node,它有多老牌呢?

NPM 的包名字就是直接使用的 “WebSocket”。曾經(jīng),我們西嶺老濕看到之后就給出了兩個(gè)字的評(píng)價(jià):“猖狂”。

這個(gè)庫(kù)完全使用 JavaScript 實(shí)現(xiàn),包含了客戶端及服務(wù)端的實(shí)例。其中,客戶端包含了 Node 和 瀏覽器 兩個(gè)運(yùn)行環(huán)境的代碼,除了支持我們前面提到的 Websocket 協(xié)議的 13 版本,它同時(shí)還支持 Websocket 協(xié)議 8 這個(gè)老版本,實(shí)屬優(yōu)秀。

接下來(lái),我們就來(lái)看看,如何借助 Websocket-Node 實(shí)現(xiàn)一個(gè) Websocket 服務(wù)。

服務(wù)端

安裝 npm install websocket 后,創(chuàng)建服務(wù)器運(yùn)行文件 ws-server.js ,代碼如下,請(qǐng)認(rèn)真閱讀代碼及注釋:

 
 
 
 
  1. // === 作為帥哥,一定要加注釋 ===
  2. var Websocket = require('websocket').server
  3. var http = require('http')
  4. // 創(chuàng)建 HTTP 服務(wù),作為第一次握手鏈接使用
  5. var httpServer = http.createServer().listen(8080,function(){
  6.   console.log('http://127.0.0.1:8080')
  7. })
  8. // 創(chuàng)建 websocket 服務(wù)實(shí)力
  9. var wsServer = new Websocket({
  10.   // 配置依賴的握手 http 服務(wù)器
  11.   httpServer:httpServer,
  12.   autoAcceptConnections:false
  13. })
  14. // 保存鏈接池
  15. var conArr = []
  16. // 監(jiān)聽 ws 請(qǐng)求事件
  17. wsServer.on('request',function(request){
  18.   // 獲取鏈接示例
  19.   var connection = request.accept()
  20.   // 保存連接池
  21.   conArr.push(connection)
  22.   // 監(jiān)聽消息事件
  23.   connection.on('message',function(msg){
  24.     console.log(msg)
  25.     // 循環(huán)連接池,推送廣播消息至客戶端
  26.     for(let i = 0;i
  27.       conArr[i].send(msg.utf8Data)
  28.     }
  29.   })
  30. })
  31. // 據(jù)說(shuō),長(zhǎng)得好看的都會(huì)看注釋

過(guò)多的描述,就不寫了,據(jù)說(shuō),長(zhǎng)得好看的都會(huì)看代碼注釋(●'?'●)

運(yùn)行代碼文件后,不出意外的情況下,命令行進(jìn)程會(huì)被占用,監(jiān)聽端口也會(huì)被占用,證明服務(wù)端運(yùn)行成功。如果兩個(gè)都沒被占用,想啥呢?失敗了呀寶子……

如果服務(wù)器啟動(dòng)成功,我怎么用客戶端建立鏈接查看呢?有一款 Websocket 客戶端工具叫 WebsocketMan,如果感興趣,你可以下載來(lái)試試。

但是像我這樣的帥哥,一般都是自己寫客戶端:)

客戶端

Websocket 的客戶端并沒有什么技術(shù)難點(diǎn),就是瀏覽器 API 調(diào)用。只要你把通信機(jī)制夠清楚,這玩意就沒有不會(huì),因?yàn)榉浅:?jiǎn)單,我們直接選擇純手寫就可以了,如果你想使用 Websocket-Node 客戶端,確實(shí)還會(huì)更簡(jiǎn)單。

當(dāng)然,在寫之前,還是要去看看手冊(cè)的,要不然你怎么知道有哪些 API 呢?

來(lái),手冊(cè)地址給你:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket

你先看著,我就不客氣,直接開干……

 
 
 
 
  1.   
  •   
  •   
  •   
  • 過(guò)多的描述,就不寫了,據(jù)說(shuō),長(zhǎng)得好看的都會(huì)看代碼注釋(●'?'●)

    至此,一個(gè)完整的 websocket 通信已經(jīng)建立完成并能夠進(jìn)行雙向通信了。

    Websocket-Node 確實(shí)很好用,但是功能也確實(shí)比較單一了,需要你對(duì) WebSocket 機(jī)制有一定的理解之后,才能實(shí)現(xiàn)相應(yīng)的能力。如果,我對(duì) websocket 完全不懂,但又想搞個(gè)聊天室,能不能行?

    指!定!能!行!

    Socket.IO

    一個(gè)目前最為強(qiáng)大且好用的,基本屏蔽了 websocket 概念的 websocket 庫(kù)。你幾乎不用掌握 websocket 相關(guān)的知識(shí),只需要按照 Socket.IO 中提供的 API 就能夠很好的實(shí)現(xiàn)一個(gè) websocket 通信。

    注意:程序員要“除機(jī)心”。

    • 在不了解 Websocket 時(shí),學(xué)習(xí) Websocket 中,強(qiáng)烈不建議使用。
    • 在生產(chǎn)環(huán)境下,強(qiáng)烈建議使用。

    服務(wù)端

     
     
     
     
    1. const { createServer } = require("http");
    2. const { Server } = require("socket.io");
    3. const httpServer = createServer();
    4. const io = new Server(httpServer, {
    5.   cors: {
    6.     origin: "*",
    7.     methods: ["GET", "POST"]
    8.   }
    9. });
    10. io.on("connection", (socket) => {
    11.   socket.on('sendMsg',(data)=>{
    12.     io.emit('pushMsg',data)
    13.   })
    14. });
    15. httpServer.listen(3000, function () {
    16.   console.log('http://127.0.0.1:3000')
    17. });

    客戶端

     
     
     
     
    1.   
    2.   
    3.   
    4.   Document
    5.   
    6.   
    7.   
    8.   

    沒什么可解釋的,就直接按照 Socket.IO 的 API 寫就完事了。

    吾聞之吾師,有機(jī)械者必有機(jī)事,有機(jī)事者必有機(jī)心。機(jī)心存於胸中,則純白不備。

    -- 《莊子·天地》

    參考資料:

    • 《HTML5 WebSocket權(quán)威指南》 機(jī)械工業(yè)出版社 2014 年 3 月第 1 版
    • http://www.ruanyifeng.com/blog/2017/05/websocket.html
    • https://www.cnblogs.com/hustskyking/p/websocket-with-node.html
    • https://www.cnblogs.com/jingmoxukong/p/7755643.html
    • https://zhuanlan.zhihu.com/p/23467317
    • https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket

    庫(kù):

    • https://socket.io/docs/
    • https://github.com/theturtle32/WebSocket-Node

    當(dāng)前名稱:對(duì)Websocket完全不懂,但又想搞個(gè)聊天室,行嗎?
    網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/dpggsdg.html