转载

一个简单的聊天或者私信系统设计

不少网站都会内置聊天或者私信系统, 为了方便更多人, 现将一个最简单的聊天系统的接口设计放在这里, 这是一个基于 HTTP 的聊天系统设计.

首先是视图设计:

# view:  msg/unread  (全局)未读消息列表 chat  一对一聊天窗口 chat/history  我的聊天记录(按人组织)列表

接着是数据接口设计:

# ajax:  msg/unread/get  获取(全局)未读消息列表  @last_msg_id: 获取比此消息更晚的未读消息, 不包含该条消息. chat/get  获取一对一聊天记录  @user_id: (msg_id, user_id 必须传一个)聊天者  @msg_id: (msg_id, user_id 必须传一个)根据此消息, 可得到聊天者, 并可在显示聊天记录时定位到对应的消息 chat/get_unread  @user_id: 聊天者  @last_msg_id: 获取比此消息更晚的未读消息, 不包含该条消息. chat/send  发送消息 chat/history/get  我的聊天记录(按人组织)列表

其中, 带有 last_msg_id 参数的接口, 可用于轮询获取新消息, 以便在缺少推送机制(PUSH)时提供一种替代方案. 大多数情况下, 10秒一次的刷新频率能达到"实时聊天"的效果.

当有推送机制时, 如采用iComet, 推送机制只推送通知(notify), 实际的消息内容仍然通过带 last_msg_id 的接口获取. 也就是说, 把固定刷新频率, 改为受通知时刷新(PUSH + PULL 结合).

另外, 消息的持久化可以使用 MySQL 数据库, 但更推荐 SSDB NoSQL 数据库, 可以 SSDB 能存储超过十亿条的聊天历史记录并能快速查询.

基于 SSDB + iComet 的聊天系统 demo: https://github.com/ideawu/icomet-demos

原文  http://www.ideawu.net/blog/archives/953.html
正文到此结束
Loading...