GCM,我怎么知道 XMPP 数据包的结尾?

GCM, how do I know end of XMPP packet?

我正在 Python 中实施 Google 云消息 XMPP 服务器。我可以连接到 GCM 并对其进行身份验证,但是我使用 self.ssl_sock.recv(1024) 这不是很好,但适用于身份验证。

然而,当我稍后想从我在套接字上读取的 GCM 接收消息时,但是我读取了多少字节??我在 xmpp 文档中找不到任何关于某种 header 的内容,它告诉 packet/data.

的长度
def read_from_socket(self):
        data = self.ssl_sock.recv(??)
        self.handle_message(data)

XMPP 不使用分帧,所以没有header。您需要使用流式(例如 SAX)XML 解析器解析 XML 流,例如 expat。 "packet" 的 XMPP 等效项可以通过跟踪解析器树的深度来确定。

但是,如果您是 XMPP 的新手,我强烈建议您使用库,而不是尝试自己从头开始正确编写所有这些内容。

您正在使用 Python。 SleekXMPP 是一个很好的入门库,它也是 XMPP: The Definitive Guide 书中用于代码示例的库。

更多信息: