http的特点是一问一答,而即时通讯是需要双向通信的,这样以前的即时通信只能使用轮询的方式通过周期性的ajax请求获取数据,直到websocket出现,就完美实现了双向通信
<强>段轮询强>
前台使用setInterval进行定时请求后台,这样无疑非常浪费性能
<强>长轮询和长连接(html5的EventSource) 强>
客服端连接一次,服务端不断开连接,服务端接收到新消息就发送给前,台客服端和服务端保持一直连接,缺点是只有服务端向客服端输出
<强> websocket 强>
websocket不再是走http协议,而是升级为websocket协议,说到底就是走应用层协议(tcp),实现双向通信,缺点是兼容性问题(ie11)
<强>插座。io 强>
上面的方式都存在一定问题,自然就有人封装一套完美的解决方案,插座。io就是集合了上面几种方案的另一种解决方案
客服端
引入包:& lt;脚本src=" https://cdn.socket.io/socket.io-1.2.1.js ";祝辞& lt;/script>
服务端和客服端通过在和排放进行交互
-
<李>排放表示发送,事件名自定义,另一端用在进行接收李>
<李>在表示接受,类似金桥绑定事件,事件名对应发出事件名李>
<李>连接,断开是连接和断开事件李>
//建立连接 var插座=io (http://localhost: 80)//> npm我koa2 koa-socket - s
const IO=要求(“koa-socket”) const高雅=要求(“koa2”) const io=new io () const应用=new高雅()//将套接字和应用关联 io.attach(应用)//和客服端进行连接 io。(“连接”,(上下文)=比;{ console.log(“连接上了”) })//接收消息 io。(“sendMsg”功能(上下文){//console.log (context.data)//向客服端实时发送消息 io。广播(“msg1”、“我是服务器来的”)//广播,所有人消息 io。广播(allmessage, context.data.newAccount) })//处理登陆同步信息 io。(“登录”,上下文=比;{ 让id=context.data.id; console.log(上下文); });
上面就是koa-socket使用的简单介绍,只实现了简单的消息推送和接收,后面还有私聊和群发,其原理是获取到每个用户的socketid,发送消息时对应发送,后面再进行更新
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。