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); })