整个系统是一个C/S系统,客户端没有做复杂的图形化界面而是用Java终端开发的(黑窗口),服务端IM实例是Netty写的socket服务。

ZK作为服务注册中心,Redis用来做分布式会话的缓存,并保存用户信息和轻量级的消息队列。
服务端的工作原理
在上述架构中:NettyServer启动,每启动一台Server节点,都会把自身的节点信息,如:ip、port等信息注册到ZK上(临时节点)。
正如上节架构图上启动了两台NettyServer,所以ZK上会保存两个Server的信息。
同时ZK将监听每台Server节点,如果Server宕机ZK就会删除当前机器所注册的信息(把临时节点删除),这样就完成了简单的服务注册的功能。
客户端的工作原理
Client启动时,会先从ZK上随机选择一个可用的NettyServer(随机表示可以实现负载均衡),拿到NettyServer的信息(IP和port)后与NettyServer建立链接。
链接建立起来后,NettyServer端会生成一个Session(即会话),用来把当前客户端的Channel等信息组装成一个Session对象,保存在一个SessionMap里,同时也会把这个Session保存在Redis中。
这个会话特别重要,通过会话,我们能获取当前Client和NettyServer的Channel等信息。
Session的作用
我们启动多个Client,由于每个Client启动,都会先从ZK上随机获取NettyServer的的信息,所以如果启动多个Client,就会连接到不同的NettyServer上。
熟悉Netty的朋友都知道,Client与Server建立接连后会产生一个Channel,通过Channel,Client和Server才能

该博客介绍了如何基于Netty搭建高性能的IM即时通讯系统,利用Zookeeper进行服务注册,Redis处理分布式会话和消息队列。系统采用C/S架构,客户端使用Java终端,服务端使用Netty。通过ZK实现服务发现,通过Redis实现会话持久化和负载均衡,详细阐述了私聊和群聊的消息发送机制。
最低0.47元/天 解锁文章
8849

被折叠的 条评论
为什么被折叠?



