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

資訊專(zhuān)欄INFORMATION COLUMN

Node.js+WebSocket創(chuàng)建簡(jiǎn)單聊天室

cppprimer / 543人閱讀

摘要:好的,這樣以來(lái)我們的前期準(zhǔn)備工作就已經(jīng)完成了,下面我們來(lái)搭建聊天室對(duì)應(yīng)的客戶(hù)端和服務(wù)器端。

websocket簡(jiǎn)介

websocket其實(shí)HTML中新增加的內(nèi)容,其本質(zhì)還是一種網(wǎng)絡(luò)通信協(xié)議,以下是websocket的一些特點(diǎn):

    (1)因?yàn)檫B接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,幾乎所有的防火墻都不會(huì)阻塞WebSocket鏈接
    (2)因?yàn)樗褂肏TTP 進(jìn)行握手,所以該協(xié)議可以自然地集成到網(wǎng)絡(luò)瀏覽器和HTTP服務(wù)器中
    (3)心跳消息(稱(chēng)為ping和pong)將反復(fù)被發(fā)送,保持WebSocket連接幾乎一直處于活躍狀態(tài)?;旧?,一個(gè)節(jié)點(diǎn)周期性地發(fā)送一個(gè)小數(shù)據(jù)包另一個(gè)節(jié)點(diǎn)(ping),而另一個(gè)節(jié)點(diǎn)則使用包含了相同數(shù)據(jù)的數(shù)據(jù)包作為響應(yīng)(pong)。這將使這兩個(gè)節(jié)點(diǎn)處于連接狀態(tài)
    (4)WebSocket協(xié)議可以安全地支持跨域連接,避免Ajax和XMLHttpRequest上的限制
    (5)HTTP規(guī)范要求瀏覽器將并發(fā)連接數(shù)限制為每個(gè)主機(jī)名兩個(gè)連接,但是在我手完成之后該限制就不再存在,因?yàn)榇藭r(shí)連接已經(jīng)不再是HTTP連接了       

今天我將和大家分享如何利用Node.jswebsocket來(lái)搭建一個(gè)簡(jiǎn)單的多人聊天室

 對(duì)node.js稍微有所了解的朋友知道,node.js采用的包管理機(jī)制即,所以我們?yōu)槭褂脀ebsocket必須使用npm(包管理工具)來(lái)安裝websocket所需要的包,首先在終端通過(guò)命令行的形式進(jìn)入node.js中的node_modules的npm安裝目錄下,例如在我這臺(tái)電腦上對(duì)應(yīng)的路徑就是:

D:Node.js ode_modules pm ode_modules,最后使用命令 **npm -install nodejs-websocket**來(lái)安裝使用websocket時(shí)所需要的包。
好的,這樣以來(lái)我們的前期準(zhǔn)備工作就已經(jīng)完成了,下面我們來(lái)搭建聊天室對(duì)應(yīng)的客戶(hù)端和服務(wù)器端。

搭建聊天室服務(wù)器端
以下這段代碼是我搭建服務(wù)器端時(shí)所需的代碼,大家在GitHub官網(wǎng)搜索一下很容易找到的一個(gè)模板:
   1  var ws = require("nodejs-websocket")
   2  var PORT = 3000 
   3 var clientCount = 0
       
   4  var server = ws.createServer(function (conn) {
   5     console.log("New connection")
   6     clientCount++
   7     conn.nickname = "user"+clientCount
   8    broadcast(conn.nickname+" comes in")
        
   9    conn.on("text", function (str) {
   10        console.log("Received "+str);
   11        broadcast(str)
                                       })
    
   12    conn.on("close", function (code, reason) {
   13        console.log("Connection closed")
   14        broadcast(conn.nickname+" left")
                                                 })
        
   15  conn.on("error",function(err){
   16        console.log("Handle Error");
   17        console.log(err);
                                     })
   18                                       }).listen(PORT)
   19      console.log("websocket listening on port:"+PORT)
    
   20      function broadcast(str){
   21          server.connections.forEach(function(connection) {
   22              connection.sendText(str)
             });
         }
服務(wù)器代碼分析:

第1行:通過(guò)require(‘node-websocket’)來(lái)獲取一個(gè)websocket對(duì)象,
第2、3行定義服務(wù)器的端口號(hào)即服務(wù)器端的客戶(hù)連接數(shù)

第6行,每當(dāng)服務(wù)器收到一個(gè)客戶(hù)端發(fā)來(lái)的連接請(qǐng)求時(shí),客戶(hù)端數(shù)加1

第7行,給每個(gè)客戶(hù)端取一個(gè)昵稱(chēng)

第8行,每當(dāng)有客戶(hù)端個(gè)服務(wù)器端建立連接時(shí),服務(wù)器就向全部客戶(hù)端廣播一條消息:
userX comes in

第9~11行,當(dāng)客戶(hù)端和服務(wù)器建立連接時(shí),服務(wù)器就向全部客戶(hù)端廣播消息,即將任意一個(gè)客戶(hù)端發(fā)的消息轉(zhuǎn)發(fā)給全體客戶(hù)端

第12~14行是當(dāng)有客戶(hù)端關(guān)閉時(shí),服務(wù)器告訴全體客戶(hù)端userX left

第20-22是broadcast函數(shù)的實(shí)現(xiàn)

搭建客戶(hù)端:

1
2
3
4
5
6
7 Document
8
9
10

ChatRoom


11


12
13

14
15
35
36

客戶(hù)端代碼分析:

第16行建議和服務(wù)器端的websocket連接

第17行~24行,當(dāng)在輸入框輸入消息后點(diǎn)擊發(fā)送按鈕時(shí),客戶(hù)端向服務(wù)端發(fā)送消息

總結(jié)

總體來(lái)說(shuō)客戶(hù)端的搭建是比較簡(jiǎn)單的,就是使用4個(gè)常用的websock API(onopen,onclose,onerror,onmessage),難點(diǎn)在于如何搭建服務(wù)器端。以上就是我分享的關(guān)于利用node.js和websocket來(lái)搭建一個(gè)簡(jiǎn)單的多人聊天室。最后附上結(jié)果運(yùn)行圖:

本例的源碼下載地址:

鏈接:http://pan.baidu.com/s/1cdIatC 密碼:6pxl

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

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

相關(guān)文章

  • Node.js+WebSocket創(chuàng)建簡(jiǎn)單天室

    摘要:好的,這樣以來(lái)我們的前期準(zhǔn)備工作就已經(jīng)完成了,下面我們來(lái)搭建聊天室對(duì)應(yīng)的客戶(hù)端和服務(wù)器端。 websocket簡(jiǎn)介 websocket其實(shí)HTML中新增加的內(nèi)容,其本質(zhì)還是一種網(wǎng)絡(luò)通信協(xié)議,以下是websocket的一些特點(diǎn): (1)因?yàn)檫B接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,幾乎所有的防火墻都不會(huì)阻塞WebSocket鏈接 (2)因...

    Seay 評(píng)論0 收藏0
  • 感謝有“你”-------socket.io

    摘要:首先將的包拷貝到你的項(xiàng)目文件下,并在部分使用標(biāo)簽將其添加進(jìn)去使用專(zhuān)業(yè)的函數(shù)創(chuàng)建一個(gè)端點(diǎn)當(dāng)在消息框輸入消息并點(diǎn)擊發(fā)送按鈕時(shí),客戶(hù)端就將向服務(wù)器端發(fā)送輸入的消息,消息類(lèi)型是。 我此前曾發(fā)過(guò)一遍文章有關(guān)于如何利用node.js+websocket搭建一個(gè)簡(jiǎn)單的多人聊天室有興趣的朋友可以關(guān)注我的技術(shù)客棧---濤濤技術(shù)客棧。今天學(xué)習(xí)了websocket的一個(gè)框架---socket.io后瞬間感覺(jué)...

    stackvoid 評(píng)論0 收藏0
  • 感謝有“你”-------socket.io

    摘要:首先將的包拷貝到你的項(xiàng)目文件下,并在部分使用標(biāo)簽將其添加進(jìn)去使用專(zhuān)業(yè)的函數(shù)創(chuàng)建一個(gè)端點(diǎn)當(dāng)在消息框輸入消息并點(diǎn)擊發(fā)送按鈕時(shí),客戶(hù)端就將向服務(wù)器端發(fā)送輸入的消息,消息類(lèi)型是。 我此前曾發(fā)過(guò)一遍文章有關(guān)于如何利用node.js+websocket搭建一個(gè)簡(jiǎn)單的多人聊天室有興趣的朋友可以關(guān)注我的技術(shù)客棧---濤濤技術(shù)客棧。今天學(xué)習(xí)了websocket的一個(gè)框架---socket.io后瞬間感覺(jué)...

    FuisonDesign 評(píng)論0 收藏0
  • 搭建WebSocket簡(jiǎn)易天室

    摘要:本文,我們通過(guò)和實(shí)現(xiàn)一個(gè)在線聊天室的。創(chuàng)建三個(gè)對(duì)象,一個(gè)作為多人在線聊天室,一個(gè)作為提示當(dāng)前在線人數(shù),還有一個(gè)為的作為在線人數(shù)顯示文本。創(chuàng)建一個(gè)對(duì)象為作為消息發(fā)送輸入框,用戶(hù)可以在此輸入消息進(jìn)行發(fā)送。 本文,我們通過(guò)Egret和Node.js實(shí)現(xiàn)一個(gè)在線聊天室的demo。主要包括:聊天,改用戶(hù)名,查看其他用戶(hù)在線狀態(tài)的功能。大致流程為,用戶(hù)訪問(wèn)網(wǎng)頁(yè),即進(jìn)入聊天狀態(tài),成為新游客,通過(guò)底部...

    Lowky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<