一、主要思想:
    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");
    
    

socket聊天的业务逻辑的更多相关文章

  1. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  2. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  3. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  4. HL AsySocket 服务开发框架 - 业务逻辑层

    一 概述 Socket服务只是提供一个网络传输服务. 业务逻辑层在整体架构中的位置在那里呢,如图: 网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处 ...

  5. Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...

  6. Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...

  7. 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

    本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". ...

  8. iOS登录及token的业务逻辑

    登录的业务逻辑 { http:是短连接. 服务器如何判断当前用户是否登录? // 1. 如果是即时通信类:长连接. // 如何保证服务器跟客户端保持长连接状态? // "心跳包" ...

  9. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

随机推荐

  1. NYOJ 棋盘覆盖

    数字很大,要用大数乘法. #include<iostream> #include<stdio.h> #include<string.h> #include<q ...

  2. System.getProperty("user.dir")

    /**获得当前类的完整路径.最后一句*/package test;import java.net.MalformedURLException;import java.net.URI;import ja ...

  3. vux icon

    官网:https://doc.vux.li/zh-CN/components/icon.html <icon type="success"></icon>& ...

  4. openshift 容器云从入门到崩溃之三《安装openshift》

    准备好环境,在安装之前请先了解openshift提供的ansible有大量的安装选项 文档地址:https://docs.okd.io/latest/install/configuring_inven ...

  5. Linux 查找安装包所在目录的常用方法

    1. which命令查找出相关命令是否已经在搜索路径中: $which gcc //显示出GNC的C编译器安装在哪个目录 返回: /usr/bin/gcc 注意:如果which没有找到要找的命令,可以 ...

  6. php 获取 mime type 类型,fileinfo扩展

    背景: version < php-5.3 没有API能够查看文件的 mime_type, 故需要编译扩展 fileinfo 来扩展PHP的API(finfo_*系列函数).php-5.3 以后 ...

  7. openCV学习——一、图像读取、显示、输出

    openCV学习——一.图像读取.显示.输出   一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...

  8. AngularJs ng-change事件/指令(转)

    from:http://blog.csdn.net/u011127019/article/details/52564111 定义和用法 ng-change 指令用于告诉 AngularJS 在 HTM ...

  9. Django后台管理系统讲解及使用

    大家在创建Django项目后,在根路由urls.py文件中,会看到一行代码 from django.contrib import admin urlpatterns = [ url(r'^admin/ ...

  10. linux中安装oracle数据库

    1. 执行 ./runInstaller 提示 /tmp 的空间过小执行 mount -o remount,size=1G,noatime /tmp重新设置 /tmp 的大小 2. 安装完成数据库之后 ...