聊天工具,功能点梳理:
1 商家,店小二和C通信
商家,店小二: webIM
C user : 手机客户端
2 支持文字,表情,图片发送和展示
非图片文件可以暂时不支持(真想传输,可以挂QQ上去聊作为补充)
3 支持订单在webIM上展示
4 消息推送,联系人,好友分组,联系人在线上线推送
5 整合站内信的能力
------------------
技术实现
1 图片上传到七牛,返回URL供展示
2 发送订单连接,需要到OC查询订单信息,然后把订单信息包装为DIV进行展示
3 参与交互的组件:浏览器,商家平台,IM
IM和浏览器之间用websocket,由IM主动推消息给webIM
webIM获取联系人列表,发消息到商家平台,商家平台将消息发给IM
Q 为什么消息发送和联系人获取需要经过商家平台,
A: IM不做登录,用户必须登录到商家平台,通过商家发消息获取粉丝,公众号之类信息
Q: IM 为什么不做登录
A:IM是Go写的,不方便做一套CAS登录
4 Im如何鉴权客户端发送消息的合法信?
用户登录商家平台,启用IM,商家平台生成token放redis,返回给浏览器
if (StringUtils.isBlank(redisIM.get(RedisConstant.IM_COOKIE.replace("{hashCode}", userIdMD5)))) {
redisIM.set(RedisConstant.IM_COOKIE.replace("{hashCode}", userIdMD5), String.valueOf(userId));
}
webIm用这个hashKey跟IM建websocket连接,IM会去redis验证hashKey
-- 这种方案可靠性如何? token的失效,安全,避免恶意攻击是否具备?
--------------------
难点
1 功能
2 性能 在实现功能的时候就必须考虑性能,任何架构的设计都必须有这种考虑,否则性能容易不可控
连接数目大量增加后,怎么对连接进行管理,负载均衡怎么做
消息数目过多后,消息历史的管理
--------------------------------
独特之处
1 小二是一个C的身份,是通过邀请得到的,可以在一个IM窗口,维护多个商家,区别于传统电商