socket业务逻辑
服务端逻辑
1、引入net模块创建一个服务端,因为net模块时持久性连接,http模块时非持久性连接
2、创建一个新的服务器,建立端口号
3、用connection方法将用户链接进来,之前要先定义一个数组用于接收用户,设置好用户的id便于之后用户断开连接停止发送信息给该用户,push方法添加用户
4、使用client.on里面的data方法接收用户传递过来的消息,用map循环遍历用户所在的数组,如果存在就传递消息
5、当用户断开连接时,将用户id清除
客户端逻辑
1、引入一个net模块
2、引入readline文件读写流 可以在终端进行文件的读写
3、创建服务端
4、通过readline。createface创建文件的输入输出
5、客户端通过connect进行连接服务端,里面三个参数分别是端口号,ip地址,和回调,会调离用来接收服务端传递过来的消息
6、使用line方法进行文件的接收,通过client.write发送消息
服务端
//服务端 server.js
const net = require("net")//持久性连接 所以用net模块 http 模块非持久性连接
const server = net.createServer();
server.listen(9000);
const clients = []
//当用户连接到服务器以后 要做的事情
server.on("connection",(client)=>{
//将所有的客户端保存在一个数组中,当收到消息的时候将这个消息给所有用户发送过去
client.id = client.length;
clients.push(client);
console.log("有人连接进来了");
//接收客户端传递过来的消息
client.on("data",(data)=>{
//console.log(data+"")
//然后将这个消息发送给所有的用户
clients.map((item)=>{
if(item){
item.write(data);
}
})
})
//当客户端断开连接的时候,将他从数组中移除
client.on("close",()=>{
clients[client.id]=null
})
})
客户端
//客户端 client.js
const net = require("net");
const readline = require("readline");//创建文件读写流 可以在终端上进行文件的书写
const client = new net.Socket();
const rl = readline.createInterface({
input:process.stdin,
output:proess.stdout
})
//将buffer文件转换为文字符
client.setEncoding("utf8")
//客户端使用connect方法连接服务器 参数1: 端口号 参数2 IP地址
client.connect(9000,"127.0.0.1",()=>{
//client.write("123");
//接收服务端传递过来的消息
client.on("data",(data)=>{
console.log(data)
})
});
//让我们在终端上进行文件的读写
rl.on("line",(text)=>{
//发送消息
client.write(text);
})