web-socket
优势:1)、持续数据连接
2)、全双工作方式
3)、2byte的通信:1byte定义开始、1byte定义字长
客户端:
发送协议
——ws://普通web-socket
——wss:://加密web-socket
创立连接:
var ws,currentUser,ele;
window.onload= function(){ //一定是在web加载的时候就被创立
ws = new WebSocket("ws://myserver:8887");
ws.open = function(){ //连接建立成功,open事件将被调用
$("status").innerHTML = 'online';
$("status").style.color = 'green';
ws.onmessage = function(e){ //消息接收成功,会唤醒此函数
var msg;
try{ //拆分获得数据的方法
msg = JSON.parse(e.data); //用json去解析
}catch (SyntaxError){
$("debug").innerHTML = "invalid message";
return false;
}
发送消息:
function sendmsg(){
ws.send($("ta").value); //采用websocket中的send方法发送数据
}
ws.onclose = function(e){
$("status").innerHTML = 'offline';
$("status").style.color = 'red';
};
window.onunload = function(){ //把这个事件真正的close掉,页面关闭
ws.close();
};
客户端发送数据给了服务器,那么服务器也需要将被请求的数据返回给用户。
服务器端:最近notejs下载地址:http://nodejs.org/
创建连接:
var ws = require(_dirname + '/lib/ws'); //创建类库
server = ws.createServer();
var user_cols = {};
server.addListener("connection",function(conn)){ //添加一个listener,监听connection事件
var h = conn._server.manager.length*70;
user_cols[conn.id] = "hsl("+h+",100%,30%)";
var msg = {}; //创建message对象,虽然是空的,但是后面三项已经定义了这个对象的属性
msg.user = conn.id;
msg.color = user_cols[conn.id];
msg.text = "<em>A new user has entered the chat</em>";
conn.broadcast(JSON.stringify(msg)); //对所有客户端广播推送,通过JSON序列化
监听用户的广播:
conn.addListener("message",function(message)){ //监听收到新的事件,就会唤醒message
var msg = {}; //拿到新的信息后,会做脚本处理,防止注入js脚本***
message = message.replace(/</g,"<");
message = message.replace(/</g,">");
msg.text = message;
msg.user = conn.id;
msg.color = user_cols[conn.id];
conn.write(JSON.stringify(msg)); //使用JSON序列化之后广播
conn.broadcast(JSON.stringify(msg));
});
});
关闭连接:
server.addListener("close",function(conn)){
var msg = {};
msg.user = conn.id;
msg.color = user_cols[conn.id];
msg.text = "<em>A user has left the chat</em>";
conn.broadcast(JSON.stringify(msg));
});
server.listen(8887);
转载于:https://blog.51cto.com/ytyzzm/1389498