美文网首页
消息服务器工作流程

消息服务器工作流程

作者: 环零弦 | 来源:发表于2018-07-18 16:06 被阅读0次

消息服务器工作流程

  1. 消息服务器(Message Server, MS)启动.
    • 启动 WebSocket 服务端,监听来自 BS 的 WebSocket 连接。
  2. 业务服务器(Business Server, BS)启动。
    • BS 作为 WebSocket 客户端,建立其到 MS 的 WebSocket 连接,得到 bsCwsHandle
    • BS 作为 WebSocket 服务端启动,监听来自终端设备的 WebSocket 连接。
  3. 建立 BS 与 MS 之间的 WebSocket 连接。
    • MS 收到来自 BS 的 WebSocket 连接得到 msSwsHandle
    • MS 以随机生成的 UUID 作为此 BS 的 serverId。
    • MS 以形如 <serverId, msSwsHandle> 的映射(swMap)存储此 BS 的 ID 与 WebSocket 句柄。
  4. 建立终端与 BS 之间的 WebSocket 连接。
    • BS 收到来自终端设备的 WebSocket 得到 bsSwsHandle
    • BS 以终端登录用户的 ${ hospitalCode-hosareaCode-uid } 联合键(unionedUid)作为此终端的标识。
    • BS 以形如 <unionedUid, bsSwsHandle> 的映射(uwMap)存储此终端的标识与 WebSocket 句柄。
  5. 完成终端在 MS 处注册终端设备。
    • BS 在与终端建立完成 WebSocket 连接后,将 unionedUid 与传输类型 type=0 通过 bsCwsHandle 发送到 MS。
    • MS 收到来自 BS 的 WebSocket 消息,匹配 type 为 0,则将传来的 unionedUid 与相应的 serverId 存入 MongoDB 的 wsEndMapModel 中,wsEndMapModel 定义如下:
      const wsEndMapModel = mongoConnection.model('wsEndMap', new Schema({
         serverIdentifer: String,
         endIdentifer: String
      }));
      
  6. 发送当前完成注册的终端在 MongoDB 中缓存了的属于它的消息。
    • MongoDB 中维护了一个定义如下的 msgListModel 来存储当目标终端不在线时的消息,生存期为 600 秒。
      const msgListModel = mongoConnection.model('msgList', new Schema({
        endIdentifer: String,
        messageContent: String,
        createAt: {
           type: Date,
           expires: 600,
           default: Date.now
        }
      }));
      
    • 根据 unionedUid 查看缓存中消息,如果有,则根据 MS 中维护的 swMap 获得 当前终端所属 BS 的 msSwsHandle,对其发送查询得到的消息即可。
  7. 终端或 BS 断掉 WebSocket 的处理逻辑。
    • 终端设备中断 WebSocket 连接时,会触发 BS 端的 onclose 事件,可以在事件函数里做以下逻辑。
    • BS 主动中断与终端设备的 WebSocket 连接时,BS 将此设备 unionedUid 与传输类型 type=1 通过 bsCwsHandle 发送到 MS,MS 删除 MongoDB 中 wsEndMapModel 里 endIdentifer 是当前 unionedUid 的文档,代表此终端设备已不在线。
  8. 终端或 BS 发送 WebSocket 的处理逻辑。
    • 终端1(End1)发送消息给终端2(End2) 时,BS1 收到 End1 的消息,BS 将目标设备的 unionedUid 与传输类型 type=2 通过 bsCwsHandle 发送到 MS。
    • MS 查找 wsEndMapModel 中有没有 endIdentifer 是这个 unionedUid 的文档(此终端在线与否),如果找到代表其在线,根据查找到的 serverIdentifer 到 swMap 中拿到这个 BS 对应的 WebSocket 句柄 msSwsHandle,发送具体的消息到这个 BS。
    • 如果没找到,则将这条消息存入 MongoDB 的 msgListModel 中,等待目标终端上线,或者过期清楚。

相关文章

  • 消息服务器工作流程

    消息服务器工作流程 消息服务器(Message Server, MS)启动.启动 WebSocket 服务端,监听...

  • LollipopGo:登录服务器

    游戏服务器开发过程中,整个服务器的架构设计对于项目的影响是至关重要的,其中包括登录流程,消息机制流程,消息加密流程...

  • LollipopGo:代理服务器

    代理服务器 游戏服务器开发过程中,整个服务器的架构设计对于项目的影响是至关重要的,其中包括登录流程,消息机制流程,...

  • 微信公众号开发C#系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器...

  • ANR监测机制

    相关背景知识: Android消息机制、Android输入系统、Service工作流程、Broadcast工作流程...

  • socket 编程基础

    TCP 服务器的工作流程: 服务器调用 socket() 创建 socket; 服务器调用 bind() 绑定端口...

  • Handler的工作流程 简单明了 一看就会

    Handler的工作流程类比成【传送带】的运作流程 总共两个步骤 ->发送消息 和 调度消息 1.发送消息 Han...

  • spring MVC执行流程

    Spring MVC工作流程图: 图1: 图2: Spring工作流程描述: 用户向服务器发送请求,请求被Spri...

  • Kafka系列3-Kafka架构

    一. 工作流程 Kafka中消息是以topic进行分类的,Producer生产消息,Consumer消费消息,都是...

  • springmvc流程

    Spring MVC工作流程图 图一 **图二 ** Spring工作流程描述1. 用户向服务器发送请求,请求被S...

网友评论

      本文标题:消息服务器工作流程

      本文链接:https://www.haomeiwen.com/subject/hyaopftx.html