zoukankan      html  css  js  c++  java
  • 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");
        
        
  • 相关阅读:
    redis学习(四)
    redis学习(三)
    redis学习(二)
    redis学习(一)
    Maven入门(二)pom.xml和核心概念
    Maven入门(一)
    uni-app 引用
    uni-app 搜索栏
    Vue,组件切换-切换动画
    Vue,组件切换-方式2
  • 原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10529914.html
Copyright © 2011-2022 走看看