Python telegram.org服务器返回的错误代码35是什么
我的客户端经常从电报服务器接收以下消息容器,看起来是随机的:Python telegram.org服务器返回的错误代码35是什么,python,api,telegram,Python,Api,Telegram,我的客户端经常从电报服务器接收以下消息容器,看起来是随机的: {'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': [63
{'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,但没有描述该错误代码的含义。到目前为止,我一直忽视它,但这不是一个好的长期解决方案IMHO。你知道错误代码是什么意思吗?如前所述,代码35的错误是“预期的奇怪消息(相关消息),但即使收到了”有一组错误与坏消息相关 来自文档: 在这里,错误代码也可以采用以下值:
服务器序号
回复您,该序号应比您的正确的最大序号大1服务器序列号
(应始终为偶数)来确认当前预期的序列号,并根据需要进行调整
上述技术完全避免了这些间歇性错误消息。谢谢,我还没有看到该页面。你能解释一下如何处理这些信息吗?从文档中我不清楚这种情况是如何发生的及其后果。此外,文档中还说明必须确认消息。这是否意味着我需要返回服务器?如果是这样,使用什么方法来完成此任务?您可以在下一个请求中向您发送ACK,或者,累积ACK,然后在一段时间后发送。实现了什么机制来发送ACK?我在模式中看到的是:
msgs_ack#62d6b459 msg_id:Vector=MsgsAck
但没有发送此数据类型的方法。根据不同的问题,会将msgs\u ack
发送回服务器,就像它是一种方法而不是数据类型一样。如果您的客户机从TL模式构建了它的方法,那么您必须采取特殊措施将其构建为方法和数据类型。如果您使用msg_容器,也可以使用msg_容器。您是否找到了适当的解决方案?如果发送MsgsAck解决了问题,则是。我现在正在实施。我会让你知道这是否奏效。与bad_msg_seqno
相关的错误只是与你方错误计算msg_序列号有关。我不明白我是如何计算错序列号的。它们从零开始,增量为1,在切换dc后,它们回到零。这是不正确的吗?事实证明,我继承的代码对tcp传输和电报内容消息都使用了一个seqno
。他们不一样<代码>TCP消息的顺序为:0、1、2、3…电报内容的顺序为:1、3、5…
,因此,一旦代码成熟到可以发送消息(使用TCP序列号),我就会遇到这些错误。现在处理更好了,因为我已经将两种类型的序列号分开了!如何通过编程知道消息是“内容消息”?例如,用于创建身份验证密钥的方法不是内容消息(据我所知),但似乎使它们在编程上唯一的一点是,它们是未加密发送的,因为进行加密需要身份验证密钥。还有什么区别内容和非内容的吗?例如,MsgAcks
是否被视为内容消息?最佳经验法则:查看文档:构成主应用程序API一部分的任何内容都是内容。我担心,客户端无法“查看文档”。似乎唯一的答案是硬编码非内容消息列表,这可能会有问题,因为API模式会受到层更新的影响。。。您需要对其进行编码,并且它不会更改。请注意,当图层发生更改时,通常只是向现有类型或新类型和新功能添加新功能。核心系统功能和MTProto类型几乎从未改变。此外,您的客户机被编码到特定的架构层,因此同样不受层更改的影响。非内容消息的序列号如何?例如,如果我通过调用序列号为0的res\u pq
并为后续调用递增1来启动创建身份验证密钥的过程,则可以很好地创建身份验证密钥。但是如果我以序列号1调用res\u pq
开始,服务器不会响应。内容和非内容消息是否有单独的seqno算法?