koa socket即時通訊的示例代碼
前言
http的特點是一問一答,而即時通訊是需要雙向通信的,這樣以前的即時通信只能使用輪詢的方式通過周期性的ajax請求獲取數(shù)據(jù),直到websocket出現(xiàn),就完美實現(xiàn)了雙向通信
一 即時通訊方式簡介
段輪詢
前臺使用setInterval進行定時請求后臺,這樣無疑非常浪費性能
長輪詢和長連接(html5的EventSource)
客服端連接一次,服務(wù)端不斷開連接,服務(wù)端接收到新消息就發(fā)送給前臺,客服端和服務(wù)端保持一直連接,缺點是只有服務(wù)端向客服端輸出
websocket
websocket不再是走h(yuǎn)ttp協(xié)議,而是升級為websocket協(xié)議,說到底就是走應(yīng)用層協(xié)議(tcp),實現(xiàn)雙向通信,缺點是兼容性問題(ie11)
socket.io
上面的方式都存在一定問題,自然就有人封裝一套完美的解決方案,socket.io就是集合了上面幾種方案的另一種解決方案
二 即時通信實現(xiàn)
客服端
引入包:<script src="https://cdn.socket.io/socket.io-1.2.1.js";></script>
服務(wù)端和客服端通過on和emit進行交互
- emit表示發(fā)送,事件名自定義,另一端用on進行接收
- on表示接受,類似jq綁定事件,事件名對應(yīng)emit事件名
- connect,disconnect是連接和斷開事件
// 建立連接 var socket= io('http://localhost:80') // on表示接收 // emit表示發(fā)送 socket.on('connect', function () { console.log('連接上了') // 登錄,同步前后端信息 // 請求后端login接口,寫入socketid socket.emit('login', { // 身份標(biāo)識,可以是時間戳或者唯一id,最要用來回去socketid進行私聊 id: username }) }) // 發(fā)送消息,這里可以用發(fā)送事件進行消息發(fā)送 socket.emit('sendMsg', { newAccount: 'xxxxxx' }) // 接收消息 socket.on('msg1', function (data) { // 可以對數(shù)據(jù)進行渲染 console.log(data) }) socket.on('allmessage', function (data) { // 接收所有人消息 console.log(data); }) // 表示連接斷開了 socket.on('disconnect', function () { console.log('聊天服務(wù)器斷開了') })
服務(wù)端(koa+koa-socket)
安裝koa-socket
npm i koa2 koa-socket -S
const IO = require('koa-socket') const Koa = require('koa2') const io = new IO() const app = new Koa() // 將socket和app關(guān)聯(lián) io.attach(app) // 和客服端進行連接 io.on('connection', (context) => { console.log('連接上了') }) // 接收消息 io.on('sendMsg', function (context) { //console.log(context.data) // 向客服端實時發(fā)送消息 io.broadcast('msg1', '我是服務(wù)器來的') // 廣播,所有人消息 io.broadcast('allmessage', context.data.newAccount) }) // 處理登陸同步信息 io.on('login', context => { let id = context.data.id; console.log(context); });
總結(jié)
上面就是koa-socket使用的簡單介紹,只實現(xiàn)了簡單的消息推送和接收,后面還有私聊和群發(fā),其原理是獲取到每個用戶的socketid,發(fā)送消息時對應(yīng)發(fā)送,后面再進行更新
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node自定義安裝更改npm全局模塊默認(rèn)安裝路徑的步驟
有段時間沒用npm了,新建個項目,需要改變npm全局包默認(rèn)安裝的路徑,本文就來介紹一下node自定義安裝更改npm全局模塊默認(rèn)安裝路徑的步驟,感興趣的可以了解下2021-09-09node.js+express留言板功能實現(xiàn)示例
本文介紹基于nodejs+express+art-template的留言板功能。包含列表界面、添加界面和發(fā)送留言功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09nodejs個人博客開發(fā)第四步 數(shù)據(jù)模型
這篇文章主要為大家詳細(xì)介紹了nodejs個人博客開發(fā)的數(shù)據(jù)模型,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04