Nodejs + Websocket 指定發(fā)送及群聊的實(shí)現(xiàn)
目的
通過nodejs + ws (Websocket) 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)發(fā)送及群聊發(fā)送
項(xiàng)目搭建直接跳過,這里列舉一下用到的插件
yarn add ws
WebSocket
話不多說,直接上碼
對(duì)比上一篇文章 << Nodejs+MongoDB 搭建服務(wù)( demo ) >> server.js 主要是增加了ws的引用,
webSocket 點(diǎn)對(duì)點(diǎn)也好,群聊也好,主要是用到一個(gè)方法 clients 它的作用就是存儲(chǔ)了連接,
我們可以通過對(duì)每一個(gè)連接增加標(biāo)識(shí),然后根據(jù)接收到的信息進(jìn)行解析,遍歷然后發(fā)送正確的響應(yīng)。
先解析下代碼(小聲BB), 下面會(huì)有HTML頁面
nbs.on("connection", (ws, req) => { ws.on("message", message => { // 這里解析數(shù)據(jù) const result = JSON.parse(message); // 是否是登陸,登陸后綁定id if (result.login) { ws.socketIdxos = result.id; } else { // 這里只做一個(gè)小的場(chǎng)景,不是登陸就是發(fā)送信息 // 根據(jù)存儲(chǔ)的id 是否是要 發(fā)送的對(duì)象 來單獨(dú)響應(yīng) nbs.clients.forEach(s => { if (s.socketIdxos == result.to && s.readyState == 1) { s.send(JSON.stringify({ data: result.mes })); } }); } }); ws.on("close", message => { console.log(ws.socketIdxos,"退出連接"); }); });
HTML
這里我分別建了三個(gè)頁面其中兩個(gè)模擬用戶,一個(gè)模擬群聊
這是BBB用戶,另一個(gè)頁面是 AAA 只是改了下信息而已,就不都貼上來了,很簡(jiǎn)單
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>BBB111</title> <script> const ws = new WebSocket("ws://localhost:8181"); ws.onopen = function (e) { ws.send(JSON.stringify({ "id":"BBB111", "login":true, })); } function sendMessage() { ws.send(JSON.stringify({ "id":"BBB111", // 當(dāng)前ID "login":false, // 是否登陸 "to":"AAA111", // 發(fā)送對(duì)象 "mes":"我是BBB111,這是發(fā)送給AAA111的消息" // 發(fā)送內(nèi)容 })); } function sendYUYUYU() { ws.send(JSON.stringify({ "id":"BBB111", "login":false, "to":"YUYUYU", "mes":"我是BBB111,這是到群里的消息" })); } ws.onmessage = function (e) { console.log(e,"eeee-"); } </script> </head> <body > <button onclick="sendMessage();"> 發(fā)送 </button> <button onclick="sendYUYUYU();"> 群聊 </button> </body> </html>
下面的是只用來接收的群頁面,更簡(jiǎn)單
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>群聊</title> <script> const ws = new WebSocket("ws://localhost:8181"); ws.onopen = function (e) { // 這里主要作用就是注冊(cè)下群成立了 ...... ws.send(JSON.stringify({ "id":"YUYUYU", "login":true, })); } ws.onmessage = function (e) { console.log(e,"eeee-"); } </script> </head> <body > </body> </html>
展示
const ws = new WebSocket("ws://localhost:8181"); localhost 可以換成的你的本機(jī)IP,這樣頁面在其他電腦也可以發(fā)送到你的頁面上
可以看到,在BBB的頁面,接收到了AAA發(fā)送的信息
無論是AAA發(fā)送的群里信息,還是BBB發(fā)送的群里信息,在群聊頁面都是可以看到的
至此,一個(gè)簡(jiǎn)單的私聊,群聊 WebSocket 就完成了,最后希望大家有所收獲,再會(huì)!!
參考網(wǎng)址如下: https://www.jb51.net/article/178117.htm
本篇文章是為記錄小白的成長歷程(主要是記性不好,記個(gè)筆記有保障,用到的時(shí)候可以拿出來瞅瞅) 2019/12/26
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
欄 目:JavaScript
本文標(biāo)題:Nodejs + Websocket 指定發(fā)送及群聊的實(shí)現(xiàn)
本文地址:http://mengdiqiu.com.cn/a1/JavaScript/9246.html


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02javascript點(diǎn)線,點(diǎn)線的代碼
- 04-02javascript潛力,javascript強(qiáng)大嗎
- 04-02javascript替換字符串,js字符串的替換
- 04-02javascript移出,js 移入移出
- 04-02包含javascript舍的詞條
- 04-02javascript并行,深入理解并行編程 豆瓣
- 04-02javascript匿名,js匿名方法
- 04-02javascript警報(bào),JavaScript警告
- 04-02javascript遮蓋,JavaScript遮蓋PC端頁面
- 04-02javascript前身,javascript的前身
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法