聊天服务的设计随想

聊天系统

对于互联的多用户在线游戏,聊天是不可少的。

聊天的类型

这里分类是按用户的多少来分类。

单点类型

很简单如Skype(QQ)那样,你可以和好友,一对一的在线聊天。

多点类型

如Skype,可以自由组织群聊。

现有的几个开源方案

ejabberd

ejabberd(基于Jabber/XMPP协议的即时通讯服务器)是Gameloft现在非常废柴的聊天系统。从开源角度,ejabberd似乎是一款不错的聊天替代品。

优点
  1. 跨平台,容错,集群和模块化.
  2. 容易拓展(轻松的50行用户认证插件代码就集成到现有平台)。
  3. 分布式, 容错, 并基于开放标准的实时通讯系统.
  4. 功能服丰富的XMPP服务器.
  5. 同时适合小规模布署和超大规模布署, 无论它们是否需要可伸缩性.
缺点
  1. 对于移动互联网来说,Jabber/XMPP非常臃肿。(以前公司的分布式聊天平台中当群聊到50人时就非常吃力了)
  2. 部署麻烦。
  3. 维护性差,维护难度大。

openfire

Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。优点是易用安装使用,还提供WEB管理工具。

Jabber/XMPP的弊端

对于移动互联网环境来说,XMPP是臃肿的,实践中表现并非尽人意,延迟,群聊用户支持的用户不多。 从客户端来讲,更为耗电,消息处理延迟,并发量不大。

轻巧的MQTT

MQTT(Message Queuing Telemetry Transport) 是IBM开发的一个即时通讯协议。

优点

  1. 对移动端友好,省电,每秒请求量更为客观。
  2. 协议轻巧,通信的内容协议自由组织。

缺点

  1. 现有的开源实现不多,需要花费些时间实现。

架构设计实现

HTTP协议

JOIN group
POST group/<group-name>/join
group-name:这是需要加入聊天的组名
username:用户名
token:用户令牌

如果用户成功加入,将会返回http状态200及内容:

{
    "chat_host": 1234
    "port" : "",
    "name": "",
    "id" : ,
    "users" : {
        ""
    }

}

为连接聊天室的域名和端口

如果加入失败返回500状态码和内容:

Room full

CHAT MESSAGE Protocal

client向server发送的命令协议比较简单,使用行指令。空格分隔,第一个单词为指令。

GET group datetime
group:是订阅组消息
datetime:是用户上次获取消息的时间,如果超过服务的限制会返回过去五分钟的消息。

得到到回复:

ok:1034\r\n
[{'msg': 'hello group' 'from' : 'user_id', datetime: '2014-08-11 12:12:123', ...},
{'msg': 'hello group' 'from' : 'user_id3', datetime: '2014-08-11 12:12:123', ...},
...
]

协议头行为状态和内容长度,以英文冒号分隔。

如果失败,将返回错误信息文本:

error:100\r\n
Unknow error

转载于:https://www.cnblogs.com/nagi/p/4191449.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值