我正在使用 XMPP pubsub。一切正常。用户可以创建节点,感兴趣的用户可以订阅该节点。但是我想将发布操作存储到 DB。因为在我的应用程序中,很多事情都是由 pubsub 处理的,比如聊天、提要等所以在页面刷新时我想坚持聊天。所以我正在寻找任何将它保存到幕后数据库中的 openfire 插件。就像 openfire 在 MUC(多用户聊天)的情况下保存聊天一样。我不想手动发送 ajax 请求。那么有什么方法可以记录发布项目。
更新:
在我的表单配置中存在一个问题,其中持久项目默认设置为 false。所以我按照您的建议配置了节点。但是我再次在页面刷新时遇到了一些问题。我会用一个例子来解释你。在我的应用程序中,用户 A 登录并创建一个节点,并在成功创建后向用户 B 发送请求,现在用户 B 订阅用户 A 创建的节点。现在,如果任何用户进行页面刷新,我发送一个类型为 get 的 IQ 节获取您上面提到的所有错过的事件。但是我收到错误 400 subid-required。
<body rid='430432056' xmlns='http://jabber.org/protocol/httpbind' sid='dca8aafc'><iq to='pubsub.abc' type='get' xmlns='jabber:client' id='3408:sendIQ'><pubsub xmlns='http://jabber.org/protocol/pubsub'><items node='3821poU5zq7nhn1'/></pubsub></iq></body>
作为回应,我得到:
<body xmlns='http://jabber.org/protocol/httpbind'><iq type="error" id="3408:sendIQ" from="pubsub.abc" to="test@abc/dca8aafc"><pubsub xmlns="http://jabber.org/protocol/pubsub"><items node="3821poU5zq7nhn1"/></pubsub><error code="400" type="modify"><bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><subid-required xmlns="http://jabber.org/protocol/pubsub#errors"/></error></iq></body>
所以可以帮助我哪里出错了。我还阅读了链接http://xmpp.org/extensions/xep-0060.html#owner-configure point : 6.5.9.1 说如果请求实体有多个订阅节点但没有指定订阅ID,服务必须向订阅者返回错误。那么这是否意味着我再次订阅了同一个节点?我检查了是否是这种情况,但我只订阅了一次。所以只是找出问题所在。