一意义:实现客户端与服务器之间的信息交流
先说下逻辑:客户端发送数据服务器进行接收,接收成功够在把数据返回给每一个客户端,当其中某个客户端断开时,服务器不再对这个客户端发送数据。
想要和服务器建立持久性连接就得用到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相同;但它允许自动想服务端推送消息。