最近做的项目,需要小数据实时通信,比如说学生登录,教师端实时显示登录信息;教师控制学生端进入新的页面或者同一控制流程,这些都可以用到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") {
}
}
}
}