node使用socket 实现本地聊天对话
一意义:实现客户端与服务器之间的信息交流
先说下逻辑:客户端发送数据服务器进行接收,接收成功够在把数据返回给每一个客户端,当其中某个客户端断开时,服务器不再对这个客户端发送数据。
想要和服务器建立持久性连接就得用到net模块 net模块创建得服务器能保持持久性得连接 而HTTP模块不行,它只能暂时储存数据。
1服务器:
通过connection事件,建立每个客户端得连接,将每个客户端添加到数组中。
通过data事件,得到从客户端传递得信息。
通过数组遍历,将消息发送给每个客户端。
通过ID,当客户端断开消息时,将这个客户端从数组中移除
const net = require("net");
const server = net.createServer();
server.listen(9000);
const clients = [];
//当用户链接到服务器以后
server.on("connection",(client)=>{
//将所有的客户端保存在一个数组中,当收到消息的时候将这个消息给所有的用户发送过去
client.id = clients.length;
clients.push(client);
console.log("有人链接进来了");
//接收客户端传递过来的消息
client.on("data",(data)=>{
//然后将这个消息发送给所有的用户
clients.map((item)=>{
if(item){
item.write(data);
}
})
})
//当客户端断开链接的时候将他从数组中移除
client.on("close",()=>{
clients[client.id] = null;
})
})
客户端:
通过new.net.Socket()创建客户端。
通过reqdline模块进行文件读写(在终端)。
通过connect方法连接至服务器,两个参数,1服务器端口号,2ip地址。
通过data事件接收服务器得数据。
const net = require("net");
//创建文件的读写流
const readline = require("readline");
const client = new net.Socket();
const rl = readline.createInterface({
input:process.stdin,
output:process.stdout
})
//将buffer文件转换为字符串
client.setEncoding("utf8")
//参数1:端口号 参数2 IP
client.connect(9000,"127.0.0.1",()=>{
//接收服务端传递过来的消息
client.on("data",(data)=>{
console.log(data)
})
});
//可以让我们在终端上进行文件的读写
rl.on("line",(text)=>{
//发送消息
client.write(text);
})
webSocket作用和socket相同;但它允许自动想服务端推送消息。
浙公网安备 33010602011771号