GCM,我怎么知道 XMPP 数据包的结束?
Posted
技术标签:
【中文标题】GCM,我怎么知道 XMPP 数据包的结束?【英文标题】:GCM, how do I know end of XMPP packet? 【发布时间】:2015-02-27 21:48:43 【问题描述】:我正在用 Python 实现一个 Google Cloud Messaging XMPP 服务器。我可以连接到 GCM 并对其进行身份验证,但是我使用 self.ssl_sock.recv(1024)
这不是很好,但适用于身份验证。
但是,当我以后想从 GCM 接收消息时,我在套接字上读取,但是我读取了多少字节?我在 xmpp 文档中找不到任何关于某种标头的信息,这些标头告诉数据包/数据的长度。
def read_from_socket(self):
data = self.ssl_sock.recv(??)
self.handle_message(data)
【问题讨论】:
【参考方案1】:XMPP 不使用框架,因此没有标题。您需要使用流式(例如 SAX)XML 解析器(例如 expat)来解析 XML 流。可以通过跟踪解析器树的深度来确定“数据包”的 XMPP 等价物。
但是,如果您是 XMPP 新手,我强烈建议您使用库,而不是尝试自己从头开始正确编写所有这些内容。
您正在使用 Python。 SleekXMPP 是一个不错的入门库,它也是 XMPP: The Definitive Guide book 中用于代码示例的库。
更多信息:
Github:https://github.com/fritzy/SleekXMPP 文档:http://sleekxmpp.readthedocs.org/en/latest/ 皮皮:https://pypi.python.org/pypi/sleekxmpp【讨论】:
我最终阅读,直到我得到一个结束标签,例如。 '' 或类似的。但是,您的解决方案是更好的方法。我这样做是为了学习 Python,python 服务器永远不会取代我当前运行的服务器。 您知道,您的解决方案是不正确的,因为嵌套消息标签是完全有效的。一个简单的实际示例是转发消息时:xmpp.org/extensions/xep-0297.html#example-2 谢谢,不知道,但是这种消息“永远不会”从谷歌云消息发送。但正如你所说,我可能会实施,所以我可以在完成阅读之前检查所有标签/元素是否已关闭。以上是关于GCM,我怎么知道 XMPP 数据包的结束?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 slimxmpp python 中为 gcm ccs 请求创建 xmpp 节?
如何在 Android 上实现 XMPP Server 以及与 GCM 的通信?
是否可以将 GCM 云连接服务器 (XMPP) 与 Heroku 应用程序一起使用?