http的特色是一問一答,而即時通信是須要雙向通訊的,這樣之前的即時通訊只能使用輪詢的方式經過週期性的ajax請求獲取數據,直到websocket出現,就完美實現了雙向通訊html
服務端和客服端經過on和emit進行交互
emit表示發送,事件名自定義,另外一端用on進行接收
on表示接受,相似jq綁定事件,事件名對應emit事件名
connect,disconnect是鏈接和斷開事件html5
// 創建鏈接 var socket= io('http://localhost:80') // on表示接收 // emit表示發送 socket.on('connect', function () { console.log('鏈接上了') // 登陸,同步先後端信息 // 請求後端login接口,寫入socketid socket.emit('login', { // 身份標識,能夠是時間戳或者惟一id,最要用來回去socketid進行私聊 id: username }) }) // 發送消息,這裏能夠用發送事件進行消息發送 socket.emit('sendMsg', { newAccount: 'xxxxxx' }) // 接收消息 socket.on('msg1', function (data) { // 能夠對數據進行渲染 console.log(data) }) socket.on('allmessage', function (data) { // 接收全部人消息 console.log(data); }) // 表示鏈接斷開了 socket.on('disconnect', function () { console.log('聊天服務器斷開了') })
const IO = require('koa-socket') const Koa = require('koa2') const io = new IO() const app = new Koa() // 將socket和app關聯 io.attach(app) // 和客服端進行鏈接 io.on('connection', (context) => { console.log('鏈接上了') }) // 接收消息 io.on('sendMsg', function (context) { //console.log(context.data) // 向客服端實時發送消息 io.broadcast('msg1', '我是服務器來的') // 廣播,全部人消息 io.broadcast('allmessage', context.data.newAccount) }) // 處理登錄同步信息 io.on('login', context => { let id = context.data.id; console.log(context); });
上面就是koa-socket使用的簡單介紹,只實現了簡單的消息推送和接收,後面還有私聊和羣發,其原理是獲取到每一個用戶的socketid,發送消息時對應發送,後面再進行更新web