Socket聊天逻辑

摘要:
1.A向服务器2发送消息。服务器将在收到消息3后向所有用户发送此消息。如果用户断开连接,则不需要向该用户1发送消息。创建一个持久连接服务器网络,并将其端口号设置为9000constnet=require(“net”);constserver=net.creatServer();服务器侦听(9000);2、 用户连接到服务器后,服务器。on(“连接”,(客户端)

         1、A发送消息到服务器

         2、服务器接收到消息后会给所有用户发送这条消息

         3、如果有用户断开连接,则不用给此用户发送

一、创建持久性连接服务器  net,设置其端口号为9000

const net = require(“net”);

const server = net.creatServer();

server.listen(9000);

二、当用户连接到服务器以后

         server.on("connection",(client)=>{})

三、存储下所有的用户

         const clients = [];

         clients.push(client);

四、给用户编号,断开连接后删除

         client.id = clients.length;

         4.1 创建client.js文件,连接到服务器

                  const net = require("net");

                  const client = new net.Socket();

                  client.connect(9000,"127.0.0.1",()=>{

});

                  4.1.1 接受服务器传递过来的消息

                          client.on("data",(data)=>{

        console.log(data)

    })

         4.2 接收客户端传递过来的消息

                  client.on("data",(data)=>{

    })

                  4.2.1将buffer文件转换为字符串

                          client.setEncoding("utf8")

                  4.2.2然后将这个消息发送给所有的用户   

                                  clients.map((item)=>{

            if(item){

                item.write(data);

            }

        })

          client.on("close",()=>{

        clients[client.id] = null;

})

五、创建文件的读写流

         const readline = require("readline");

         const rl = readline.createInterface({

    input:process.stdin,

    output:process.stdout

})

         rl.on("line",(text)=>{

    //发送消息

    client.write(text);

})

免责声明:文章转载自《Socket聊天逻辑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Control.CheckForIllegalCrossThreadCalls=false不可在多线中随便使用android——屏幕适配大全(转载)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java从入门到实战之(26)Java网络实例之练习

1、获取指定主机的IP地址 如何使用 InetAddress 类的 InetAddress.getByName() 方法来获取指定主机(网址)的IP地址? package Java_Learn.File; import java.net.InetAddress; import java.net.UnknownHostException; public...

JAVA框架-前后端分离(Json和ajax)

为什么要前后端分离? 在以前的学习代码中,可以看出来我们在jsp页面页面上也通过EL表达式和jstl写了很多的java程序,这实际上在前端的页面中混入了很多后端的逻辑,这就是传统的web开发。在传统的web开发中,页面展示的内容以及页面之间的跳转逻辑,全都由后台来控制,这导致了前后端耦合度非常高,耦合度高则意味着,扩展性差,维护性差,等等问题 传统开发的问...

ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据、分布式系统中经常会使用到Zookeeper,它是微服务、分布式系统中必不可少的分布式协调框架。它的作用体现在分布式系统中解决了配置中心的问题,以及解决了在分布式环境中不同进程之间争夺资源的问题,也就是分布式锁的功能以及分布式消息队列功能等...

vue实现文件下载功能

对接口进行请求: //导出excel表到桌面 getData.exportexcel = (data)=>{ return http({ method: 'post', url: baseUrl + '/exportexcel/', data: { firstName: 'Fred', l...

virtiofsd

virtio-fs介绍 在guest之间共享文件系统的方案 virtio-fs把文件mmap进qemu的进程地址空间并让不同guest使用DAX访问该内存空间 DAX数据访问和元数据的共享内存访问都是通过共享内存的方式避免不必要的VM/hypervisor之间通信(在元数据没有改变的情况下) Kata Containers utilizes the L...

微信小程序---数组操作

原数组A Page({ data: { listA:[{id:1,name:'芒果',count:1},{id:2,name:'香蕉',count:6},    ]} }) 向前插入新数据(数组B) //要增加的数组B(newArrayB) var newArrayB = [{id:6,name:'向前增加数据--'...