Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 GCM,我怎么知道XMPP数据包的结尾?_Python_Sockets_Xmpp_Google Cloud Messaging - Fatal编程技术网

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

Python GCM,我怎么知道XMPP数据包的结尾?,python,sockets,xmpp,google-cloud-messaging,Python,Sockets,Xmpp,Google Cloud Messaging,我正在用Python实现一个Google云消息传递XMPP服务器。我可以连接到GCM并进行身份验证,但是我使用的是self.ssl\u sock.recv(1024),这并不好,但对身份验证有效 但是,当我以后想从GCM接收消息时,我会在套接字上读取消息,但是我要读取多少字节??我在xmpp文档中找不到任何关于某种报头的信息,这种报头可以告诉数据包/数据的长度 def read_from_socket(self): data = self.ssl_sock.recv(??)

我正在用Python实现一个Google云消息传递XMPP服务器。我可以连接到GCM并进行身份验证,但是我使用的是
self.ssl\u sock.recv(1024)
,这并不好,但对身份验证有效

但是,当我以后想从GCM接收消息时,我会在套接字上读取消息,但是我要读取多少字节??我在xmpp文档中找不到任何关于某种报头的信息,这种报头可以告诉数据包/数据的长度

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

XMPP不使用框架,因此没有标题。您需要使用流式(如SAX)XML解析器(如expat)解析XML流。可以通过跟踪解析器树的深度来确定“数据包”的XMPP等价物

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

您正在使用Python。一个好的库是SleekXMPP,它也是本书中用于代码示例的库

更多信息:

  • Github:
  • 文件:
  • PyPi:

我一直在阅读,直到我得到一个结束标签,例如“或类似标签”。但是,您的解决方案是更好的方法。我这样做是为了学习Python,Python服务器永远不会取代我当前运行的服务器。正如您所知,您的解决方案是不正确的,因为嵌套消息标记是完全有效的。一个简单的实际例子是转发消息时:谢谢,我不知道,但是这种消息将“永远”不会从谷歌云消息发送。但正如您所说,我可能会实现,以便在完成阅读之前检查所有标记/元素是否已关闭。