NexTalk消息服务器设计

NexTalk消息服务器设计

?文档版本: 5.6 发布时间: 2014/10/15

架构简介

NexTalk 基于WEB标准协议架构设计,??目标是为WEB站点或应?用快速 便捷的集成即时消息。

NexTalk架构上分离WebIM服务器与消息服务器,客户站点的WEB服务 器与NexTalk提供的WebIM插件集成,NexTalk消息服务器直接负责浏览 器?长连接和消息路由。

WebIM插件负责与??网站的?用户资料、好友关系、群组关系集成,访问站 点的数据库。NexTalk在WebIM on GitHub上提供了丰富的程序开发库 和框架集成包,包括PHP、Java、.Net、Python、Ruby等。

消息服务器负责处理跨域的?长轮询(JSONP)或?长连(WebSockt),?用户登 录社区??网站的WebIM后,?用户浏览器直接与消息服务器建?立连接,完全 不占?用站点的连接资源。

消息服务器采?用Erlang并发编程语?言开发,单服务器可?支持10万以上在 线连接,集群服务器可?支持100万在线连接。

消息服务器设计

NexTalk消息服务器采?用Erlang并发编程语?言开发,低系统资源消耗, ?支持?大量并发连接。

消息服务器的核?心是MQTT协议,基于MQTT定义的Topic匹配?方式进?行 消息路由。主要模块包括HTTPD模块、JSONPD模块、 WebSocket模 块、路由模块、MQTT模块、认证模块和统计模块。

消息服务器提供了多协议的外部接?口,包括HTTP REST接?口、JSONP 轮询接?口、WebSocket接?口、MQTT客户端接?口。

消息服务器?支持多服务器集群,可平滑扩展到100万连接?用户规模。

线上?用户、访客、群组、服务可表述为?一个Endpoint进程,消息通过 HTTP接?口发送,推送给Jsonp、Websocket、MQTT等接收接?口。

消息路由设计

NexTalk5版本的消息路由机制,基于MQTT协议设计,以?方便?支持?手机 和桌?面。

MQTT协议规范详?见:

Address设计

?用户、访客、群组(聊天室)、服务表述为?一个Endpoint对象,Endpoint 对象唯?一的寻址标识为:

domain/{domain} /{node}/{nodeId} /client/{clientId}

举例:

/domain/nextalk.im/uid/1/client/chrome /domain/nextalk.im/vid/219392/client/android

字段 domain node nodeId clientId

值 域名 节点(uid,vid,gid,sid枚举) ?用户ID、访客ID、群组ID等 登录终端标识,例如Android,浏览器

Queue设计

Queue名称 ?用户Queue 群组Queue 服务Queue 访客Queue

Queue结构 /domain/${domain}/uid/${uid} /domain/${domain}/gid/${gid} /domain/${domain}/sid/${sid} /domain/${domain}/vid/${vid}

路由设计

JSONP

——————————Desktop

||

MQTT

||

WebSocket

———————————Mobile

消息流程

title Message Route User1->HTTPD: POST /v5/messages

HTTPD-->Endpoint1: Message Endpoint1-->Router: Message Router-->Endpoint2: Message alt WebSocket

Endpoint2-->WebSocketd: Message else JSONP

Endpoint2-->Jsonpd: Message end alt WebSocket

WebSocketd-->User2: JSON Data else JSONP

Jsonpd-->User2: JSON Data end

HTTP接?口设计

WebIM插件与消息服务器间的HTTP REST接?口,WebIM插件转发?用户 上下线、现场、消息、状态 给消息服务器,从服务器读取当前在线?用 户、群组成员等信息。HTTP接?口列表如下:

标识

名 ?方法

URL

说 明

ONLINE

?用 户 上 线 POST /v5/presences/online 接 ?口

OFFLINE

?用 户 下 线 POST /v5/pr