我的客户经常从电报服务器收到以下消息容器,看似随机:
{'MessageContainer': [{'msg': {u'bad_msg_notification': {u'bad_msg_seqno': 4, u'bad_msg_id': 6330589643093583872L, u'error_code': 35}}, 'seqno': 4, 'msg_id': 6330589645303624705L}, {'msg': {u'msgs_ack': {u'msg_ids': [6330589643093583872L]}}, 'seqno': 4, 'msg_id': 6330589645303639041L}]})
您可能会注意到:“错误代码”:35上面,但没有说明该错误代码的含义。到目前为止,我一直忽略它,但这不是一个好的长期解决方案。您知道该错误代码意味着什么吗?
有一组与以下相关的错误坏消息序列号
从文档中:
这里,error_code 还可以采用以下值:
- msg_seqno 太低(服务器
已收到一条 msg_id 较低但带有以下任一消息的消息
更高或相等且奇数的序列号)
- msg_seqno 太高(同样,
有一条消息的 msg_id 较高,但 msg_id 较低或较低
相等且奇数的序列号)
- 预期的 msg_seqno 为偶数(不相关
消息),但收到奇怪的消息
- 预期为奇数 msg_seqno(相关
消息),但甚至收到
正式定义: 消息序列号 (msg_seqno) https://core.telegram.org/mtproto/description#message-sequence-number-msg-seqno
32 位数字,等于“内容相关”数量的两倍
消息(那些需要确认的消息,特别是那些
不是容器)由发送者在此消息之前创建,并且
如果当前消息是一条消息,则随后加一
内容相关的消息。容器总是在其创建之后生成
全部内容;因此,它的序列号大于或
等于其中包含的消息的序列号。
Notes:
- 每个新会话都从 seq_no = 1 --> (0 * 2) + 1 开始
- 您发送的每个序列号的计算方式如下:(number_of_content_messages_已经发送* 2) + 1,因此您发送的所有序列号始终是奇数
- 容器消息 seq_no == 其内容消息的最大 seq_no
- 服务器总是会回复你正确的信息
server_seq_no
这应该比你的大 1correct到目前为止最大 seq_no 。
- 因此,一个好的检查/seq_no 纠正方案是使用最新收到的
server_seq_no
(应该始终是偶数)以确认您的current-expected
seq_no 应该是,并根据需要进行调整。
上述技术对我来说完全避免了这些间歇性错误消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)