聊天室demo
服务端
var ws = require("nodejs-websocket");
console.log("开始建立连接...")
var users = new Map(),game2 = null , game1Ready = false , game2Ready = false;
var server = ws.createServer(function(conn){
conn.on("text", function (str) {
let parse = JSON.parse(str);
let ret = {};
switch(parse.action){
case 'connect':
if(parse.key){
parse.conn = conn;
parse.online = true;
users.set(parse.key,parse);
ret.type = 'connect';
ret.msg = '链接成功';
conn.sendText(JSON.stringify(ret));
}else{
console.log('未登录的用户');
ret.type = 'waring';
ret.msg = '请登录后发言';
conn.sendText(JSON.stringify(ret));
}
break;
case 'msg':
if(checkMsg(parse.msg)){
for(let user of users ){
if(user[1].online){
ret.type = 'msg';
ret.key = parse.key;
ret.msg = checkMsg(parse.msg);
user[1].conn.sendText(JSON.stringify(ret));
}
}
}
break;
}
// conn.sendText(str)//发送给客户端消息
})
conn.on("close", function (code, reason) {
console.log("关闭连接",'code',code,'reason',reason);
});
conn.on("error", function (code, reason) {
console.log("异常关闭",'code',code,'reason',reason)
});
}).listen(8001)
console.log("WebSocket建立完毕");
function checkMsg(msg){
if(msg === null || msg === undefined || msg === ''){
return false;
}
return msg;
}
客户端
<html>
<head>
<meta charset="utf8">
<title>title</title>
</head>
<body>
<div id = 'connect'>
链接中...
</div>
<div id = 'content'>
</div>
<input id='msg'>
<h1 οnclick='send()'>send</h1>
</body>
</html>
<script>
var wsServer = 'ws://127.0.0.1:8001';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {//閾炬帴鎴愬姛浜嬩欢
console.log("Connected to WebSocket server.",'evt:'+evt);
let data = {}
data.action = 'connect';
data.key = navigator.userAgent;
console.log(data);
websocket.send(JSON.stringify(data));
};
websocket.onclose = function (evt) {//鍏抽棴閾炬帴浜嬩欢
console.log("Disconnected",'evt:'+evt);
};
websocket.onmessage = function (evt) {//鎺ユ敹娑堟伅浜嬩欢 鏈嶅姟绔� sendText浜嬩欢 瑙﹀彂姝や簨浠�
console.log('Retrieved data from server: ' + evt.data);
let d = JSON.parse(evt.data);
console.log(d)
if(d.type == 'waring'){
alert(d.msg);
}else if(d.type == 'connect'){
document.getElementById('connect').innerText = d.msg;
}else{
let para=document.createElement("p");
let span=document.createElement("span");
let spanT=document.createTextNode(d.key+' 说:');
para.appendChild(spanT);
let node=document.createTextNode(d.msg);
para.appendChild(node);
let element=document.getElementById("content");
element.appendChild(para);
}
};
websocket.onerror = function (evt, e) {//鍙戠敓閿欒鍚庣殑浜嬩欢
console.log('Error occured: ' + evt.data);
};
console.log(websocket);
function send(){
let v = document.getElementById('msg').value;
let data = {}
data.action = 'msg';
data.key = navigator.userAgent;
data.msg = v;
console.log(data);
document.getElementById('msg').value = '';
websocket.send(JSON.stringify(data));//瑙﹀彂 鏈嶅姟绔� message 浜嬩欢
}
</script>