摘要:好的,這樣以來(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.js及websocket來(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ù)器端時(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
第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
摘要:好的,這樣以來(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)因...
摘要:首先將的包拷貝到你的項(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é)...
摘要:首先將的包拷貝到你的項(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é)...
摘要:本文,我們通過(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ò)底部...
閱讀 2593·2023-04-26 00:56
閱讀 2037·2021-10-25 09:46
閱讀 1276·2019-10-29 15:13
閱讀 839·2019-08-30 15:54
閱讀 2224·2019-08-29 17:10
閱讀 2641·2019-08-29 15:43
閱讀 517·2019-08-29 15:28
閱讀 3058·2019-08-29 13:24