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

  • 相关阅读:
    正则
    springboot整合rabbitmq(fanout广播模式)
    docker 安装rabbitmq
    centos7安装rabbitmq
    rabbitmq报错{:query, :rabbit@master1, {:badrpc, :timeout}}
    Linux永久修改hostname
    thread dump日志文件分析
    模板方法模式
    装饰器模式
    springboot集成redis,压测报错;
  • 原文地址:https://www.cnblogs.com/aaa1122331/p/10494404.html
Copyright © 2020-2023  润新知