Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python telegram.org服务器返回的错误代码35是什么_Python_Api_Telegram - Fatal编程技术网

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的错误是“预期的奇怪消息(相关消息),但即使收到了”

有一组错误与坏消息相关

来自文档:

在这里,错误代码也可以采用以下值:

  • msg_seqno过低(服务器 已收到消息,消息id较低,但 较高或相等且奇数的序号)
  • msg_seqno过高(类似, 有一条消息具有较高的msg_id,但具有较低的msg_id或 等号和奇数(序号)
  • 应为偶数msg_seqno(不相关 消息),但收到奇数
  • 奇数消息序列号(相关) 信息),但甚至收到
  • 正式定义:

    一个32位数字,等于“内容相关”数字的两倍 消息(需要确认的消息,尤其是 不是由发件人在此邮件之前创建的容器),以及 如果当前消息为 与内容相关的消息。容器总是在其 全部内容;因此,其序号大于或 等于其中包含的消息的序列号

    注意事项:

  • 每个新会话从seq_no=1-->(0*2)+1开始
  • 您发送的每个序列号的计算公式为:(已发送的内容消息数量*2)+1,因此您发送的所有序列号始终为奇数
  • 容器messages seq_no==其内容消息的最大seq_no
  • 服务器将始终使用正确的
    服务器序号
    回复您,该序号应比您的正确的最大序号大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算法?