Node+Socket实现聊天室

NodeJs的net模块提供了Socket接口,可用来构建聊天室,下面我们来一下如何实现这一功能的,分为客户端和服务端

一、服务端

var net = require("net");//引入node的net模块
var chatServer = net.createServer();//创建服务器实例
chatServer.listen(8000);//监听端口
var clientMap = new Object();//用来保存客户端的信息
var  i = 0;//连接用户的流水号(代替客户端的名字)
//当客户端连接上时触发connection事件
chatServer.on("connection",(client)=>{
console.log("客官,您来啦!");
client.name = ++i;//名字
    clientMap[client.name] = client;

//对客户端发送消息的一个监听
client.on("data",(data)=>{
console.log("有人说:" + data);
//广播
broadcast(data,client);
});
//error
client.on("error",(event)=>{
console.log("eroor is:" + event);
//结束
client.end();
});

//客户端关闭
client.on("close",(data)=>{
//删除
delete clientMap[client.name];
console.log(client.name + "下线啦");
//告诉所有的用户,某某下线啦
broadcast(client.name + "下线啦",client);
});
})

//广播机制-----android
function broadcast(msg,client){
for(var i in clientMap){
clientMap[i].write(client.name + "say:" + msg +" ");
}
}
二、客户端
var net = require("net");

var host = "127.0.0.1";
var port = 8000;

//创建一个socket
var client = new net.Socket();
//设置字符编码
client.setEncoding = "utf-8";

//连接服务器
client.connect(port,host,()=>{
client.write("您好");
});
// 为客户端添加“data”事件处理函数
// data是服务器发回的数据
client.on("data",(data)=>{
console.log("服务器传来了:" + data);
//继续发送消息
sendMsg();
});

//加载dos窗口输入模块
var readline = require("readline");

var r1 = readline.createInterface({
input:process.stdin,
output:process.stdout
})

function sendMsg(){
r1.question("请输入:",(inputStr)=>{
client.write(inputStr + " ");
})
}
三、操作方法
打开DOS窗口,输入node xxx,首先运行服务端
再新打开一个DOS串口,输入node xxx,运行客户端,在客户端输入要说的话,服务端就会显示说的话,再由服务端发给所有的用户

 
原文地址:https://www.cnblogs.com/lfjweb/p/6426600.html