如何用JS设计和写多人聊天室的功能,代码是什么
Admin 2022-06-20 群英技术资讯 1174 次浏览
在这篇文章中,我们来学习一下“如何用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("聊天室已关闭!!");
})
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了vue的webcamjs集成方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
这篇文章主要为大家详细介绍了vue3.x使用swiper实现卡片轮播,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
想要了解清楚js中如何使用prototype文章内容的小伙伴,一定要来关注下爱站技术频道小编所带来的资料,这里对JavaScript中的引用和变量作用域结合prototype做出了详细解释,一起看看吧!
这篇文章主要介绍了Element el-button 按钮组件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文主要给大家分享JS内存空间的相关内容,给大家介绍了栈与堆、变量对象与基础数据类型、引用数据类型与堆内存和内存空间管理等内容,对帮助大家学习和加深JS内存空间的知识有一定的帮助,接下来我们一起来看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008