关于icomet的安装及使用方式可以阅读前面几篇博文,有了前面的基础再来实现一对一或者群聊就比较容易了,关键是如何设计。在实现的基础上还要保证信息实时送达,保证信息安全。

点击观看视频教程

  首先说一下一对一聊天,每一个用户有自己的独立通道(频道)和token(icomet生成),并且用户只接收自己通道(频道)的信息。这里我们可能有疑问了,只接收自己通道的信息那其他用户发来的信息怎么会接收到呢?其实某用户给目标用户发送消息是将消息推动到目标用户的通道的,并不是用户发消息只发送到自己的通道的,并且用户端无需知道目标用户的通道(频道)名称,这一切都由应用服务器来实现,下面看一下架构设计图。

首先用户需要通过应用服务器(例如Nginx+PHP+DB)注册通道并获取token,实质是应用服务器对请求做验证后再请求icomet获取token返回给客户端,客户端通过token和通道保持连接。再看一下消息发送的过程。

icomet一对一聊天架构图

  上图描述了用户A给用户C发送消息的过程,用户A只需要将消息和目标用户告诉应用服务器就可以了,应用服务器做验证后会将数据推送到用户C对应的通道,这就是消息的发布,用户C就可以订阅到消息。

  看到这里如果是多人在一个群组内聊天那只需要创建一个群组通道然后把token和通道发送给用户,这样用户就可以接收到通道的信息。那么这样用户可能拥有多个通道会不会有冲突,这也看如何进行设计,首先多个通道的消息是在不同的聊天界面,另外客户端的token也不要有冲突混乱,聊天界面、token、通道名是绑定在一块的,这些数据如何在对应有多种方案,比如序列化到cookie中或者打开对应的聊天页面时应用服务器直接返回对应的token和通道,当然应用服务器要讲token等信息也要保存在数据库中。