通过流与查询进行通信。正确的方法是什么?
我正在编写我的第一个网络应用程序。它操纵 jabber 客户端并使用 IQ 节与某些服务进行通信。但细节并不重要。
这种交互通过扭曲的 xmlstream(python 语言)进行。典型情况描述如下:http://juick.com/help/api/xmpp/ 简而言之,我可以发送“查询”,服务器依靠我提供“结果”。
我实现了一些基本操作,例如“发送消息”、“对收到的消息执行操作”。问题出在流操作上。使用 deferreds 从服务器请求任何数据是否更好?以及如何将结果返回到需要的地方呢?
您可以在这里查看我的代码: http://bitbucket.org/ boh/tmp/src/56c131cd1e62/juick_app/twisted_app.py 我试图让它变得简约。
I'm writing my first network application. It manipulates jabber client and communicates with some service with IQ-stanzas. But details are not important.
This interaction works through twisted xmlstream (python language). Typical situations are described here: http://juick.com/help/api/xmpp/ To be short, I can send a "query" and server relies me with "result".
I implemented some basic actions like "send message", "do action on message received". The problem is in operating with stream. Is it better to use deferreds to request any data from server? And how to return the result to the place where it is needed?
You can look through my code here: http://bitbucket.org/boh/tmp/src/56c131cd1e62/juick_app/twisted_app.py
I tried to make it minimalistic.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要将响应与回复配对,请使用 iq.id 属性。您可以将一些延迟存储在按 id 索引的缓存中,并在收到回复时运行它们。由于 XMPP 是基于 TCP 的,因此您大多数情况下都会以正确的顺序收到回复。如果 deferred 已经在缓存中存在了一段时间,您可以限制缓存并运行 deferred 的 errback。
To pair a response with a reply, you use the iq.id attribute. You can store a few deferreds in a cache indexed by id and run them when they get a reply. Since XMPP is TCP-based, you will mostly get replies in the right order anyway. You can cap the cache and run the deferred's errback if the deferred has been in the cache for a while.