node websoket 实现 聊天室demo

聊天室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>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值