医生端IM服务器

Sand 461bda6734 修复全科医生无法看到求助组的问题;修复闭包引起的自我消息发送 8 năm trước cách đây
doc 7a5dc1dbe4 重构完成,完成REST API单元测试 8 năm trước cách đây
src 461bda6734 修复全科医生无法看到求助组的问题;修复闭包引起的自我消息发送 8 năm trước cách đây
test 28cee5783c 开发完成 8 năm trước cách đây
.gitignore 051ea0758c 修改工程结构,为患者端IM做准备 8 năm trước cách đây
readme.md 461bda6734 修复全科医生无法看到求助组的问题;修复闭包引起的自我消息发送 8 năm trước cách đây

readme.md

IM服务器

此项目是医生端即时消息服务器,与患者端不同。患者端的即时消息服务器使用C++编写,并且不具有消息存储功能,医生端与患者端已经连通,参见im.patient项目的说明。以后可能使用node.js框架统一二者。

代码管理

项目代码使用git管理,请安装git客户端并fork代码再下载修改。

开发环境安装

  • 开发工具: node.js的代码可以使用文本编辑器开发,如:Sublime, vi, vim等。也可以使用IDE开发,推荐使用WebStorm,包含大量便捷功能,加速开发。
  • 数据库准备: IM服务器使用MySQL数据库,因此需要先安装MySQL数据库。然后执行resources/schema/im_schema.sql与resources/schema/talk_group_schema.sql脚本文件,创建数据模式。 第一个创建消息存储所需要的模式,第二个创建业务讨论组数据模式,并包含演示数据。

工程结构

  • 消息流: 首先要明白即时消息的流程,有助于理解整个过程。医生端的IM仅关注医生部分,即下图中蓝色标注的内容。

IM活动图

错误处理

Node.js支持同步与异步调用,也导致了异常错误处理与众不同。一个给定的函数,它处理异常的方式要么是同步(用 throw方式)要么是异步的(用 callback 或者 EventEmitter),不会两者兼具。 用户可以在回调函数里处理错误,也可以使用 try/catch捕获异常 ,但是不能一起用。

实际上,使用throw并且期望调用者使用 try/catch 是很罕见的,因为 NodeJS里的同步函数通常不会产生运行失败(主要的例外是类似于JSON.parse的用户输入验证函数)。

测试

测试框架使用mocha。REST客户端使用supertest, should模块。

部署

部署服务之前需要配置环境变量:IM_PROFILE,其值将决定应用加载的配置文件。值为prod, test, dev,仅能使用一个。

为保证服务正常运行,当服务异常退出时自动重启服务,IM服务器使用appArmour脚本,对进程添加保护:进程异常退出时,自动重启。 为实现此目标,部署时通过appArmour启动服务即可实现进程的守护功能。

开发SDK

IM提供了开发SDK,一个JS脚本。客户端可以通过引用此脚本或将此脚本打包到资源中。此外,脚本使用jQuery作为基础环境,因此客户端需要预先引用jQuery脚本。 客户端通过以下链接引用SDK文件

<script src='http://host:port/sdk/im.client.js'></script>

API

发送系统消息

发送P2P消息

URL: http://192.168.131.115:3000/api/v1/chats/pm 请求方式:POST 参数格式:

{
    from: 发送人ID,
    to: 接收人ID,
    contentType: 内容类型,1为普通文本,2为图片,3为语音,4为超链接,
    content: "消息内容"
}

发送群消息

URL: http://192.168.131.115:3000/api/v1/chats/gm 请求方式:POST 参数格式:

{
    from: 发送人ID,
    at: at对象ID,
    group: 组ID,
    groupType: 组类别
    contentType: 内容类型,1为普通文本,2为图片,3为语音,4为超链接,
    content: "消息内容"
}

获取消息

URL: http://192.168.131.115:3000/api/v1/chats/pm?user_id=xxx 请求试:GET 参数:

  • user_id: 用户ID