xmpp:异步处理传入消息

xmpp:异步处理传入消息,xmpp,Xmpp,我正在尝试编写XMPP客户机的一个实现(无波什,直接TCP连接) 试图找出如何处理传入的消息以响应我自己的请求,并知道哪个响应与哪个请求相关,大多数协议都会用一些唯一的id标记该请求,服务器将该id与响应一起发送 我已经看到了IQ节的ID参数,但据报告它们用于标识会话,而不是唯一的消息 处理此问题的最佳方法是什么?IQ节中的ID属性将请求(获取或设置)绑定到响应(结果或错误)。对于每个请求,都应该使用一个新的ID。这是跟踪每个请求的响应的方法。新版本很好地描述了IQ的工作原理。确保您同时匹配了发

我正在尝试编写XMPP客户机的一个实现(无波什,直接TCP连接)

试图找出如何处理传入的消息以响应我自己的请求,并知道哪个响应与哪个请求相关,大多数协议都会用一些唯一的id标记该请求,服务器将该id与响应一起发送

我已经看到了IQ节的ID参数,但据报告它们用于标识会话,而不是唯一的消息


处理此问题的最佳方法是什么?

IQ节中的ID属性将请求(获取或设置)绑定到响应(结果或错误)。对于每个请求,都应该使用一个新的ID。这是跟踪每个请求的响应的方法。

新版本很好地描述了IQ的工作原理。确保您同时匹配了发件人和收到的节的id,以确保其他人没有猜到您的id号。典型的模式是使用IQtracker,您可以这样调用它(伪代码):

iq=create_xml_dom_that_is()
跟踪(iq、回调)

当我们从接收方接收到一个带有预期id的iq节时,或者当到达某个时间跨度而没有得到响应时,调用回调。

XMPP是一个成熟的协议。为什么不用图书馆?我是,strophe.js,但我做了一些调整,使其能够在基于js的平台上工作,而不使用bosh,使用直接tcp,因此我确实需要进行一些更改,并且出现了这个问题。在RFC中,我记得读取的ID属性是每个会话,而不是消息前,我弄错了吗?ID属性是每个节(消息),而不是每个会话
iq = create_xml_dom_that_is(<iq id='[counter++]' type='get' to='receiver'/>)
track(iq, callback)