摘要:好的,這樣以來我們的前期準備工作就已經(jīng)完成了,下面我們來搭建聊天室對應(yīng)的客戶端和服務(wù)器端。
websocket簡介
websocket其實HTML中新增加的內(nèi)容,其本質(zhì)還是一種網(wǎng)絡(luò)通信協(xié)議,以下是websocket的一些特點:
(1)因為連接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,幾乎所有的防火墻都不會阻塞WebSocket鏈接 (2)因為它使用HTTP 進行握手,所以該協(xié)議可以自然地集成到網(wǎng)絡(luò)瀏覽器和HTTP服務(wù)器中 (3)心跳消息(稱為ping和pong)將反復(fù)被發(fā)送,保持WebSocket連接幾乎一直處于活躍狀態(tài)。基本上,一個節(jié)點周期性地發(fā)送一個小數(shù)據(jù)包另一個節(jié)點(ping),而另一個節(jié)點則使用包含了相同數(shù)據(jù)的數(shù)據(jù)包作為響應(yīng)(pong)。這將使這兩個節(jié)點處于連接狀態(tài) (4)WebSocket協(xié)議可以安全地支持跨域連接,避免Ajax和XMLHttpRequest上的限制 (5)HTTP規(guī)范要求瀏覽器將并發(fā)連接數(shù)限制為每個主機名兩個連接,但是在我手完成之后該限制就不再存在,因為此時連接已經(jīng)不再是HTTP連接了
今天我將和大家分享如何利用Node.js及websocket來搭建一個簡單的多人聊天室。
對node.js稍微有所了解的朋友知道,node.js采用的包管理機制即,所以我們?yōu)槭褂脀ebsocket必須使用npm(包管理工具)來安裝websocket所需要的包,首先在終端通過命令行的形式進入node.js中的node_modules的npm安裝目錄下,例如在我這臺電腦上對應(yīng)的路徑就是:
D:Node.js
ode_modules
pm
ode_modules,最后使用命令 **npm -install nodejs-websocket**來安裝使用websocket時所需要的包。
好的,這樣以來我們的前期準備工作就已經(jīng)完成了,下面我們來搭建聊天室對應(yīng)的客戶端和服務(wù)器端。
以下這段代碼是我搭建服務(wù)器端時所需的代碼,大家在GitHub官網(wǎng)搜索一下很容易找到的一個模板: 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行:通過require(‘node-websocket’)來獲取一個websocket對象,
第2、3行定義服務(wù)器的端口號即服務(wù)器端的客戶連接數(shù)
第6行,每當服務(wù)器收到一個客戶端發(fā)來的連接請求時,客戶端數(shù)加1
第7行,給每個客戶端取一個昵稱
第8行,每當有客戶端個服務(wù)器端建立連接時,服務(wù)器就向全部客戶端廣播一條消息:
userX comes in
第9~11行,當客戶端和服務(wù)器建立連接時,服務(wù)器就向全部客戶端廣播消息,即將任意一個客戶端發(fā)的消息轉(zhuǎn)發(fā)給全體客戶端
第12~14行是當有客戶端關(guān)閉時,服務(wù)器告訴全體客戶端userX left
第20-22是broadcast函數(shù)的實現(xiàn)
搭建客戶端:1
2
3
第16行建議和服務(wù)器端的websocket連接
第17行~24行,當在輸入框輸入消息后點擊發(fā)送按鈕時,客戶端向服務(wù)端發(fā)送消息
總結(jié)總體來說客戶端的搭建是比較簡單的,就是使用4個常用的websock API(onopen,onclose,onerror,onmessage),難點在于如何搭建服務(wù)器端。以上就是我分享的關(guān)于利用node.js和websocket來搭建一個簡單的多人聊天室。最后附上結(jié)果運行圖:
本例的源碼下載地址:
鏈接:http://pan.baidu.com/s/1cdIatC 密碼:6pxl
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/61903.html
摘要:好的,這樣以來我們的前期準備工作就已經(jīng)完成了,下面我們來搭建聊天室對應(yīng)的客戶端和服務(wù)器端。 websocket簡介 websocket其實HTML中新增加的內(nèi)容,其本質(zhì)還是一種網(wǎng)絡(luò)通信協(xié)議,以下是websocket的一些特點: (1)因為連接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,幾乎所有的防火墻都不會阻塞WebSocket鏈接 (2)因...
摘要:首先將的包拷貝到你的項目文件下,并在部分使用標簽將其添加進去使用專業(yè)的函數(shù)創(chuàng)建一個端點當在消息框輸入消息并點擊發(fā)送按鈕時,客戶端就將向服務(wù)器端發(fā)送輸入的消息,消息類型是。 我此前曾發(fā)過一遍文章有關(guān)于如何利用node.js+websocket搭建一個簡單的多人聊天室有興趣的朋友可以關(guān)注我的技術(shù)客棧---濤濤技術(shù)客棧。今天學(xué)習(xí)了websocket的一個框架---socket.io后瞬間感覺...
摘要:首先將的包拷貝到你的項目文件下,并在部分使用標簽將其添加進去使用專業(yè)的函數(shù)創(chuàng)建一個端點當在消息框輸入消息并點擊發(fā)送按鈕時,客戶端就將向服務(wù)器端發(fā)送輸入的消息,消息類型是。 我此前曾發(fā)過一遍文章有關(guān)于如何利用node.js+websocket搭建一個簡單的多人聊天室有興趣的朋友可以關(guān)注我的技術(shù)客棧---濤濤技術(shù)客棧。今天學(xué)習(xí)了websocket的一個框架---socket.io后瞬間感覺...
摘要:本文,我們通過和實現(xiàn)一個在線聊天室的。創(chuàng)建三個對象,一個作為多人在線聊天室,一個作為提示當前在線人數(shù),還有一個為的作為在線人數(shù)顯示文本。創(chuàng)建一個對象為作為消息發(fā)送輸入框,用戶可以在此輸入消息進行發(fā)送。 本文,我們通過Egret和Node.js實現(xiàn)一個在線聊天室的demo。主要包括:聊天,改用戶名,查看其他用戶在線狀態(tài)的功能。大致流程為,用戶訪問網(wǎng)頁,即進入聊天狀態(tài),成為新游客,通過底部...
閱讀 1810·2021-08-13 15:06
閱讀 3100·2021-08-05 10:02
閱讀 3365·2019-08-30 15:55
閱讀 2378·2019-08-30 13:46
閱讀 2485·2019-08-30 13:01
閱讀 1323·2019-08-29 17:17
閱讀 2824·2019-08-29 15:27
閱讀 1431·2019-08-29 11:12