这里有一点需要注意:存放客户端与 Channel 关系的 Map 最好是预设好大小(避免经常扩容),因为它将是使用最为频繁同时也是占用内存最大的一个对象。消息上行接下来则是真正的业务数据上传,通常来说第一步是需要判断上传消息输入什么业务类型。
这时面向接口编程就发挥作用了。这里的核心代码和 「造个轮子」——cicada(轻量级 WEB 框架) 是一致的。
当我们在重启部分应用进行升级时,在该节点上的客户端怎么处理?由于我们有心跳机制,当心跳不通之后就可以认为该节点出现问题了。那就得重新请求注册鉴权模块获取一个可用的节点。在弱网情况下同样适用。
这样在理想情况下各个节点内存中的 map 关系加起来应该正好等于 Redis 中的数据。伪代码如下:
结合架构图假设这批客户端有 10W 个,首先我们需要将这批号码通过平台下的 Nginx 下发到一个推送路由中。
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |