我正在将msgs_acks
实施回电报服务器以获取"内容"收到回复时发送的消息。在第一次尝试确认第一条内容消息(initConnection
使用getNearestDc
,由invokeWithLayer
包裹)之后,我立即得到了上述错误。事件顺序如下所列。我不按顺序做什么?
传出的message_id是:6337647283454888960L,这是我想要的。 -->
被发送到服务器,从服务器返回<--
。
--> ('method_call: ', 'invokeWithLayer', {'query': ['initConnection', 'query': 'getNearestDc']})
(' message_id: ', 6337647283454888960L)
<--('TL deserialize: x = ', {'MessageContainer': [
{'msg': {u'new_session_created': {u'first_msg_id': 6337647283454888960L, u'unique_id': -8353387387127432890L, u'server_salt': -717652021221374449L}}, 'seqno': 1, 'msg_id': 6337647285940375553L},
{'msg': {u'msgs_ack': {u'msg_ids': [6337647283454888960L]}}, 'seqno': 2, 'msg_id': 6337647285940441089L}]})
<--('TL deserialize: x = ', {u'req_msg_id': 6337647283454888960L, u'result': {u'nearest_dc': 3, u'country': 'US', u'this_dc': 1}})
-->('method_call: ', 'msgs_ack', {'msg_ids': [6337647283454888960L]})
(' message_id: ', 6337647284623120384L)
('TL deserialize: x = ', {u'req_msg_id': 6337647284623120384L, u'result': {u'error_message': 'Invalid msgs_ack query', u'error_code': -500}})
答案 0 :(得分:1)
解释这个问题的最简单方法如下:
dispatch_timer
以处理待处理的msg_ids,它应该每隔2-3分钟说一次msg_id_list
msg_id_list
中有待处理的msg_ids,请将它们添加到您要在消息容器中发送的消息中。清除msg_id_list
dispatch_timer
触发,您有msg_id_list
count > 0
,那么简单发送msgs_ack(msg_id_list)
。清除msg_id_list
我已经使用此方法成功处理msg_acks而没有任何问题。
答案 1 :(得分:0)
事实证明'Invalid msgs_ack query'
错误消息与序列号无关。我错误地序列化了msg ids向量,因此查询确实无效。
一旦我得到纠正,我又收到了另一个错误:'error_code': 64
,表示容器无效。至少它知道它是一个容器!如果我遇到麻烦,我会尝试一些事情来纠正容器并发布另一个问题。