• socket聊天的业务逻辑


        一、主要思想:
        1.如果用户A想要发消息给用户B,A需要将消息发送到一个服务器上,服务器接收到A发送的消息之后,再把消息发送给B,B接收到消息
        2.当用户B断开连接时服务器不会将消息发送给B
        3.socket是一种持久性的连接方式,http一种非持久性的连接方式,所以要实现聊天需要选择socket,使用net模块来创建服务器和客户端
       二、 服务端的创建:
        1.使用net模块来创建服务器
        2.使用net.createServer()创建服务器,并绑定端口号server.listen(9000)
        3.使用server.on("connection",(client)=>{})来连接到服务器中,client表示连接进来的客户端
        4.使用一个自定义属性id将连接进来的客户端保存在一个空数组cilents中,当某客户端断开时,可通过自定义属性找到是哪一个客户端断开,并将其从数组中删除(clients[client.id]=null)
        5.通过client.on("data",(msg)=>{})方法接收客户端传递过来的信息,msg表示客户端的信息
        6.通过clients.map((item)=>{})方法遍历存放着所有客户端的数组,当客户端在数组中存在则意味着当前客户端处于连接的状态,则将接收到的信息通过item.write(msg)方法发送给所有处于连接状态的用户
        三、客户端的创建
        1.使用net模块创建客户端
        2.使用const client = new net.Socket();创建一个客户端实例
        3.客户端通过client.connect(9000,"127.0.0.1",()=>{})方法使客户端与服务器进行连接,其中9000为端口号,需与服务器的端口号一致,"127.0.0.1"为连接的IP地址,第三个参数为需要执行的回调函数
        4.客户端通过client.on("data",(msg)=>{})方法来接收服务器传递过来的消息,msg表示消息
        5.为了提高用户体验,需要创建文件的读写流,使用户可以在终端中写入多个信息,则使用readline模块创建文件读写流:
    const readline = require("readline");
    const rl = readline.createInterface({
        input:process.stdin,
        output:process.stdout
    })
    6.将输出出来的文件格式从buffer文件转换为字符串:client.setEncoding("utf8");
        
        
  • 相关阅读:
    Appium
    Appium滑动直到页面底部
    使用Maven以及碰到的坑们(持续更新中。。。)
    通过license server激活IntelliJ IDEA
    HDU 1166
    HDU 2444
    HDU 浙江科技学院校赛2016
    HDU 5651
    HDU 5650
    Interview 位运算
  • 原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10529914.html
Copyright © 2020-2023  润新知