国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

koa socket即時通訊的示例代碼

2024-05-06 16:45:59
字體:
來源:轉載
供稿:網友

前言

http的特點是一問一答,而即時通訊是需要雙向通信的,這樣以前的即時通信只能使用輪詢的方式通過周期性的ajax請求獲取數據,直到websocket出現,就完美實現了雙向通信

一 即時通訊方式簡介

段輪詢

前臺使用setInterval進行定時請求后臺,這樣無疑非常浪費性能

長輪詢和長連接(html5的EventSource)

客服端連接一次,服務端不斷開連接,服務端接收到新消息就發送給前臺,客服端和服務端保持一直連接,缺點是只有服務端向客服端輸出

websocket

websocket不再是走http協議,而是升級為websocket協議,說到底就是走應用層協議(tcp),實現雙向通信,缺點是兼容性問題(ie11)

socket.io

上面的方式都存在一定問題,自然就有人封裝一套完美的解決方案,socket.io就是集合了上面幾種方案的另一種解決方案

二 即時通信實現

客服端

引入包:<script src="https://cdn.socket.io/socket.io-1.2.1.js";></script>

服務端和客服端通過on和emit進行交互

  1. emit表示發送,事件名自定義,另一端用on進行接收
  2. on表示接受,類似jq綁定事件,事件名對應emit事件名
  3. connect,disconnect是連接和斷開事件
 // 建立連接 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('聊天服務器斷開了') })

服務端(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關聯 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,發送消息時對應發送,后面再進行更新

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天峻县| 全南县| 大名县| 巴马| 鄂州市| 玉林市| 永州市| 华阴市| 永修县| 陆丰市| 渭源县| 广汉市| 清徐县| 忻州市| 蒙山县| 乐昌市| 房山区| 临夏县| 伊金霍洛旗| 凤山县| 长治市| 内乡县| 永靖县| 中超| 炎陵县| 凤山市| 大余县| 福清市| 桂平市| 娄底市| 滕州市| 浦县| 洞头县| 延吉市| 安宁市| 邵东县| 马龙县| 凤凰县| 仙游县| 阿荣旗| 菏泽市|