最近做的项目,需要小数据实时通信,比如说学生登录,教师端实时显示登录信息;教师控制学生端进入新的页面或者同一控制流程,这些都可以用到websocket。
在我理解,websocket像是一个镜子,可以折射所有的光芒。任何一个连接websocket 服务器的客户端都可以发信息给服务器,服务器会转发出这些信息给所有的客户端。也可以给每个客户端指定名称,比如一个客户端为A,一个客户端为B,A想要给B发送数据的时候,A向服务器发送数据的目标名称可以设置为B ,这样B就会接收到信息了,而C,D用户接收不到信息。
1,首先建立websocket 服务器
2,客户端建立与服务器的连接
function (result) { if (result != null) { var data = JSON.parse(result.json); nNetIP = data.socketIP; nNetPort = data.websocketPort; nSocketPort = data.socketPort; try { var address = "ws://" + nNetIP + ":" + nNetPort; window.ws = new wsImpl(address); ws.onopen = function () { //开始连接 ws.send(JSON.stringify({ "MsgType": "login", "userID": usercode, "userType": "auctionstudent"//指定当前客户端的名称 })) }; //返回数据 ws.onmessage = function (evt) { processInformation(evt.data); }; ws.onclose = function () { //开始关闭 } ws.onerror = function () { //发生错误 console.log("错误"); ws = new wsImpl(address); } window.onbeforeunload = function (event) { console.log("关闭WebSocket连接!"); webSocket.close();
} } catch (err) { } } }
3,发送数据(指定接收用户)
ws.send( JSON.stringify({ "MsgType": "message", "message": { "type": "sendenterauction", "sacode": sacode, "currtime": result.currtime }, "targetUserType": ["auctionstudent"]//指定接收目标名称 }));
4,接收数据
//处理接收到的信息 function processInformation(data) { var info; try { info = JSON.parse(data); } catch (err) { //在此处理错误 return; } if (info.sacode == sacode) { if (info.type == "sendenterauction") { } } } }