一、主要思想:
    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. 小程序图片保存的相册授权失败问题,原接口wx.openSeting()已经废弃了的解决办法

    项目中使用的是wepy框架开发的小程序,,, 使用场景是,用户点击下载图片的时候,要调起授权button(小程序拉起授权的功能都集成在了button组件,所以这里需要用到button组件里的一个ope ...

  2. 前端ps部分

    一. 使用ps前的一些设置工作 1.首选项的设置 编剧-首选项-单位与标尺-[标尺/文字]改为像素 2.面板的设置 窗口--仅保留常用的[F7图层].[F8信息].[历史记录]. 3.视图的设置 视图 ...

  3. Nginx中的rewrite指令(break,last,redirect,permanent)

    rewite 在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以没必要 ...

  4. springboot + mybatis配置分页插件

    一:使用pagehelper配置分页插件 1:首先配置springboot +mybatis框架  参考:http://www.cnblogs.com/liyafei/p/7911549.html 2 ...

  5. Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项

    1. 已经安装cuda但是tensorflow仍然使用cpu加速的问题 电脑上同时安装了GPU和CPU版本的TensorFlow,本来想用下面代码测试一下GPU程序,但无奈老是没有调用GPU. imp ...

  6. (转)Xcode导航快捷键(大全)

    Xcode导航快捷键1.工程导航器:Command+1快速浏览代码.图片以及用户界面文件. 2.显示/隐藏导航器面板:Command+0当你在对屏幕进行截图的时候可能会想要隐藏起与你感兴趣内容的无关的 ...

  7. tp5 auth权限设置

    案例:把所需要的auth类放在一个公共的地方引用,我这里就只是放在了与application同级的extend里面的org所以我在公共控制器里面实例为use \org\Auth; 然后我再公共控制器里 ...

  8. JavaScript原型规则和实例

    var arr = [] // var arr = new Array() var obj = {} // var obj = new Object() function fn() {} // var ...

  9. mybatis3 date 的处理

    <if test="startTime!=null and startTime!=''"> <![CDATA[ and DATE_FORMAT(create_ti ...

  10. 数据库所有者 (dbo)

    数据库所有者 (dbo) dbo 是具有在数据库中执行所有活动的暗示性权限的用户.将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上.另外,由固定服务器角 ...