给连接绑定用户 ### 时序图  ### 说明 1. 握手成功后表示安全通道已经建立,但同时还要给连接设置用户甚至标签,只有这样业务才能更好的去识别用户(没有用户的业务是另外一回事)。 2. 设置用户非常简单,只需把其存储到session即可,但因为要支持集群的,就必须把用户的位置信息(或者叫路由信息)发布出去,让集群里的其他机器能够通过useId来查找用户的位置(在哪台机器),因为客户端的TCP连接在哪台机器,那么和这个客户端的所有数据传输都必须经过这台机器的这个连接!(很多同学会问为什么不把connection存储到redis)。 3. 路由中心有两部分组成:本地路由和远程路由,本地路由数据结构为userId->connection的map,数据存储在本机内存;远程路由数据结构为userId->connServer机器ip,数据存储在redis;所以要给一个用户发信息必须先查远程路由,找到用户在哪台机器,然后把消息发给这台机器,让其去本地路由查找connection并通过查找到的TCP连接把消息发给用户。 4. MessageCenter之前使用的redis提供的pub/sub实现的,也可以自己搭建MQ来实现,最新版踢人已经不再使用pub/sub,而是直接使用udp网关实现。 5. 踢人:之所以会有踢人的情况是根据业务需要来的,有些业务系统是不允许同一个用户在多个设备同时在线的,或者只允许不同类型的终端同时在线,比如QQ,手机和PC可以同时在线,但同一个帐号在两台PC登录时其中一个肯定会被踢下线,mpush的踢人要表达的也是同一个意思。 6. 顺便提一下关于同时在线的策略,或者说端的类型的定义mpush已经支持SPI定制化。