mars seq设置的一些疑问

sr4lhrrt  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(72)

demo中的 longlink_packer.m 类中有方法判断是否是推送(longlink_ispush)还是响应(longlink_identify_isresp),是根据定义的 PUSH_DATA_TASKID 来判断的,默认为0,
请问客户端发送给服务器的taskId(应该对应的服务器的seq),是否有可能为0,如果为0 就和服务器主动推送消息时冲突掉了

nbnkbykc

nbnkbykc1#

seq 是起什么作用的呀?可以用来标识消息的唯一性吗?

vdzxcuhz

vdzxcuhz2#

应该不能,这个id是int类型的,应该是每次发送消息,内存分配出来的taskid,客户端需要个根据这个来匹配对应req的rsp,服务器也需要根据这个返回指定的rsp

von4xj4u

von4xj4u3#

seq 用于标识本地消息,也是匹配响应属于哪个消息,匹配上后,移除任务。如果超时未响应会断开重连,之后再次重发未响应的消息。

如果杀掉应用程序(内存的任务没了),再次打开重连后,会发生什么事情呢?

  1. 重发未响应的消息?
  2. seq 是否重置?
  3. 这种情况如何去重呢?

@garryyan

edqdpe6u

edqdpe6u4#

sample中task id是这样来的:

private static AtomicInteger ai = new AtomicInteger(0);
taskID = ai.incrementAndGet();

相关问题