http的特点是一问一答,而即时通讯需要双向通信,所以以前的即时通讯只能通过轮询的方式通过周期性的ajax请求来获取数据,直到websocket的出现,完美的实现了双向通信即时消息简介。轮询前台使用setInterval向后台进行定时请求。这无疑是一种性能浪费。发送到前台,客服端和服务器端一直保持连接。缺点是只有服务器端向客户端输出websocket。Websocket不再使用http协议,而是升级为websocket协议。双向通信,缺点是兼容性问题(ie11)socket.io在上述方法中存在一定的问题,自然有人封装了一个完美的解决方案,socket.io是结合了上述解决方案的另一种方案。即时通讯实现客服导入包:server和customer通过on和emit进行交互。emit是发送的意思,event的名字是自定义的,另一端使用on接收on表示接受,类似jq绑定事件,事件名对应emit事件名connect,disconnect为连接断开事件//建立连接varsocket=io('http://localhost:80')//on表示接收//emit表示发送socket.on('connect',function(){console.log('connected')//登录,同步前面-endandback-endinformation//请求后端登录接口,写入socketidsocket.emit('login',{//identity,可以是时间戳,也可以是唯一id,多用于私聊回socketidid:username})})//发送消息,这里可以使用send事件发送消息socket.emit('sendMsg',{newAccount:'xxxxxx'})//接收消息socket.on('msg1',function(data){//可以渲染数据console.log(data)})socket.on('allmessage',function(data){//接收allmessagesconsole.log(data);})//表示连接断开socket.on('disconnect',function(){console.log('chatserverdisconnected')})server(koa+koa-socket)installkoa-socketnpmikoa2koa-socket-SconstIO=require('koa-socket')constKoa=require('koa2')constio=newIO()constapp=newKoa()//关联socketwithappio.attach(app)//连接客服io.on('connection',(context)=>{console.log('connected')})//接收消息io.on('sendMsg',function(context){//console.log(context.data)//实时发送消息给客服io.broadcast('msg1','我是服务端')//广播,所有消息io.broadcast('allmessage',context.data.newAccount)})//处理登录同步信息io.on('login',context=>{letid=context.data.id;console.log(context);});总结以上就是k简单介绍一下oa-socket的使用,只实现简单的消息推送和接收,后面就是私聊和群发。原理是获取每个用户的socketid,发送消息时发送对应的消息,后期更新
