千家信息网

js代码如何实现多人聊天室

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,这篇文章将为大家详细讲解有关js代码如何实现多人聊天室,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。设计要求:1)用户应通过注册登录聊天室2)聊天室可以显示所有在线
千家信息网最后更新 2024年09月23日js代码如何实现多人聊天室

这篇文章将为大家详细讲解有关js代码如何实现多人聊天室,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

设计要求:

1)用户应通过注册登录聊天室
2)聊天室可以显示所有在线用户
3)在每一条聊天内容之前,显示发出这条聊天内容的用户名。
4)可进行私密聊天。
5)当用户进入和离开聊天室时,系统会在聊天室里广播

config.js 代码如下

module.exports={    "port":3000,    "host":"127.0.0.1"}

broadcast.js 代码如下

exports.broadcast=function (data,users) {    var from=data.from;    var message=data.message;    message = from+"说: "+message;    //构建消息    var send={        mstype:"broadcast",        message:message    };    send =new Buffer(JSON.stringify(send));    //遍历用户组所有用户,出发送方的所有用户    for(var username in users){        if(username!=from){            users[username].write(send);        }    }};

Signup.js 代码如下

exports.signup = function (socket,data,users) {//获取注册用户的用户名    var username=data.username;    if(!users[username]){  //不存在,则保存用户名和socket        users[username]=socket;        var send={            mstype:"signup",            code:1000,            username:username,            message:"注册成功"        };        socket.write(JSON.stringify (send));    }else{//cunzai        var send={            mstype:"signup",            code:1001,            message: "用户名已被占,请重新输入用户名"        }        socket.write(JSON.stringify(send));    }};

p2p.js 代码如下

exports.p2p=function (socket,data,users) {    var from=data.from;    var to=data.to;    var message=data.message;    var receiver=users[to];    if(!receiver){//接收方不存在      var send={          mstype:"p2p",          code:2001,          message:"用户"+to+"不存在"      }      socket.write(JSON.stringify(send));    }else{        //存在则向接收方发送信息        var send={            mstype:"p2p",            code:2000,            from:from,            message:from+"对你说"+message        }        receiver.write(JSON.stringify(send));    }};

Server服务器端代码

//p2p 聊天室服务器var net=require("net");var config=require("./config");var broadcast=require("./broadcast");var p2p=require("./p2p");var signup=require("./signup");var users={};var server=net.createServer();server.on ("connection",function (socket) {    socket.on("data",function (data) {        data = JSON.parse(data);        switch (data.mstype) {            case "signup":                signup.signup(socket, data, users);                break;            case "broadcast":                broadcast.broadcast(data, users);                break;            case "p2p":                p2p.p2p(socket, data, users);                break;            default:                break;        }    });    socket.on("error",function () {        console.log("有客户端异常退出了");    });});server.listen(config.port,config.host,function () {    console.log("服务器在端口"+config.port+"启动监听");});

Client客户端代码如下:

var net=require("net");var config=require("./config");var Client=net.createConnection({    port:config.port,    host:config.host});var username;Client.on("connect",function () {    console.log("请输入用户名:");    process.stdin.on("data",function (data){        data=data.toString().trim();        //判断用户是否已经存在        if(! username){            var send={                mstype:"signup",                username:data            };            Client.write(JSON.stringify(send));            return;        }        var regex=/(.{1,18}):(.+)/;        var matches=regex=regex.exec(data);        if(matches){            //能匹配则是p2p            var from=username;//发送方是自己            var to=matches[1];//发给谁            var message=matches[2];            //构造JSON形式信息            var send={                mstype: "p2p",                from:username,                to:to,                message:message            };            Client.write(JSON.stringify(send));        }else{            //广播            var send={                mstype:"broadcast",                from:username,                message:data            };            Client.write(JSON.stringify(send));        }    });});Client.on("data",function (data) {    data=JSON.parse(data);    switch (data.mstype) {        case "signup":            var code=data.code;            switch (code) {                case 1000:                    username=data.username;                    console.log(data.message);                    break;                case 1001:                    console.log(data.message);                    break;                default:                    break;            }            break;        case "broadcast":            console.log(data.message);            break;        case "p2p":            var code=data.code;            switch (code) {                case 2000:                    console.log(data.message);                    break;                case 2001:                    console.log(data.message);                    break;                default:                    break;            }            break;        default:            break;    }});Client.on("error",function () {    console.log("聊天室已关闭!!");})

关于"js代码如何实现多人聊天室"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0