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相同;但它允许自动想服务端推送消息。

posted @ 2019-03-08 10:44  谁暖了冬季  阅读(651)  评论(0编辑  收藏  举报