定义用于操作redis消息队列的类——Redis
subscribe:向redis指定的通道subscribe订阅消息,如服务器1中的client1登录上线了,其用户id为1,那么subscribe(1),即告诉消息队列,如果有channel为1 的消息,告诉我。
流程梳理
1.每个服务器启动后,其事务处理类ChatService的构造函数中,先注册一个回调函数,用来处理当其消息队列中有该服务器订阅频道的信息后的一系列操作(将该频道的信息发送给注册该回调的服务器上的用户)。
2.当用户在该服务器登录上线后,该服务器就订阅一个以该用户id为channel id的频道,告诉redis这个id是我所关系的事件,如果有谁想发消息给这个id,调用我注册的回调函数,发信息给我。
3.当用户下线时,该服务器要取消该id的订阅(unsubscribe)。
4.在一对一或者群组聊天中,对于toid,
我们先判断该toid用户在不在当前服务器的在线用户中,如果在直接发消息
如果不在当前服务器中,再判断该toid的状态,如果是offline,存储离线消息
如果其状态为online,我们可以判断该toid在其它服务器上在线,调用publish,给“toid”频道发布消息
一台服务器会订阅多个channel,代表该服务器当前有哪些在线用户,如果redis消息队列中有其在线用户对应的频道,消息队列就会调用该服务器注册的回调函数。