agent处理的新思路

1. 发消息处理

从netty过来的消息,以frommstpid进行存储,之后会将seqid进行累加,然后判断tomstpid是否在本域内,如果在将seqid进行累加进行存储。也就是消息会分别存在from和to。如果不在,则重新生成seqid

2.收消息处理

以to存储,然后seqid++存储db

3.get消息处理

lastseqid无效,则将最近未收到ack的消息发过去 返回下一个有效seqid

有效的情况下,根据获取消息个数进行处理 如果是1条那么ack中携带消息体 并返回下一个有效seqid

 

另外现在发送模型是 有一个全局性的发送队列 然后每个用户会有一个待发送队列以及一个ack队列

agent启动后,发送队列定时扫描所有待发送队列是否有消息要发,若有就将该用户的mstpID放入发送队列,等待发送。发送完某个用户的消息后,再次判定其待发送队列是否为空,不为空就将该用户的mstpID从发送队列的对头移至队尾,为空则直接从队头删除。

发送时,agent从待发送队列取一定数目的消息seqID对应的消息进行发送,同时将这些seqID放到ack队列,等待ack。seqID的最大数目为ack队列的空闲值。

ack队列中的消息会标记是否发送过,agent收到ack消息,将对应的消息seqID从ack队列删除。当ack队列剩余的已发送未收到ack的消息超过时间限制,将该seqID重新放入待发送队列的最前端,等待下次发送。

posted @ 2015-03-10 11:47  543210  阅读(119)  评论(0编辑  收藏  举报