+---------------+
| MessageCenter |
+---------------+
^
|
+------------+ +------------------+
| UserCenter | <-------> | RegisterSessions |
+------------+ +------------------+
^
|
+---------------+
| SessionCenter |
+---------------+
+ ^ +
/ | \
|/_ v _\|
+----------+ +----------+ +----------+
| Session1 | | Session2 | | Session3 | ...
+----------+ +----------+ +----------+
MessageCenter 用来存储用户们发的消息,包括消息的内容和消息的状态(是否已读,是否撤销)。UserCenter 用来存储用户的账户名、密码还有联系人及联系人发送的消息。SessionCenter 用于管理登陆(连接到 [/session] (/session))连接,注册的连接是单独管理并提供单独的地址([/register] (/register))。
由于 MessageCenter 是按时间序存储的消息,所以按照消息的 msgId 排序就可以大致得到按时间序排列的消息。这样每个用户的数据结构中只记录自己接收消息的记录,而不必记录自己发的消息,只需要到时候去接收方查自己的发送队列,并将两个队列进行一次归并(而不需要完整的排序)就可以得到遵循时间序的消息序列了。