文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-25 15:10

关注

这篇文章将为大家详细讲解有关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代码如何实现多人聊天室”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯