在 xmpp 中创建一个 pubsub 节点

Posted

技术标签:

【中文标题】在 xmpp 中创建一个 pubsub 节点【英文标题】:create a pubsub node in xmpp 【发布时间】:2012-08-01 14:20:47 【问题描述】:

我正在尝试使用 XMPP 和 BOSH 管理器在 ejabber 中创建一个节点。但我想知道在创建节点节中需要传递哪些值。

以下是创建节点节的格式,但我无法创建它,所以谁能告诉我需要传递哪些值 在<formvalue> <tovalue> <nodevalue>

<iq type='set'
    from='<fromvalue>'
    to='<tovalue>'
    id='create1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <create node='<nodevalue>'/>
  </pubsub>
</iq>

注意: 我正在使用 ejabbered 并且 BOSH url 是 http://example.com:5280/xmpp-http-bind

我试过了,我得到 feature-not-implemented 错误

<body rid='95507820' xmlns='http://jabber.org/protocol/httpbind' sid='5c4fbfe432babab58fe5e39367fc1704c06ddfd7'>
   <presence xmlns='jabber:client'>
      <priority>-1</priority>
   </presence>
<iq to='example.com' type='set' xmlns='jabber:client' id='3742:sendIQ'>
   <pubsub xmlns='http://jabber.org/protocol/pubsub'>
     <create/>
     <configure/>
  </pubsub>
</iq>
</body>

我也尝试了另一种方法,在这种情况下,我得到 创建失败并出现 jid-malformed

<body rid='2037203608' xmlns='http://jabber.org/protocol/httpbind' sid='2a198251db476ef0490a4d3f591468b69edaf35b'>
   <presence xmlns='jabber:client'>
     <priority>-1</priority>
   </presence>
<iq to='example.com' type='set' xmlns='jabber:client' id='7398:sendIQ'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <create node='draw'/>
  </pubsub>
 </iq>

我也尝试使用 filepath,但我得到 creation failed with disabled

<body rid='358865391' xmlns='http://jabber.org/protocol/httpbind' sid='0f7cf72754f0fc3b0b04c8c0bb488e816380d741'>
    <presence xmlns='jabber:client'>
        <priority>-1</priority>
    </presence>
    <iq to='pubsub.example.com' type='set' xmlns='jabber:client' id='8556:sendIQ'>
        <pubsub xmlns='http://jabber.org/protocol/pubsub'>
            <create node='/home/localhost/john/draw/'/>
        </pubsub>
    </iq>
</body>

【问题讨论】:

【参考方案1】:

好吧,首先是相关的documentation。

from 是发送 iq 的用户的 jid,发送 iq 时总是如此。 to 是您要创建节点的发布-订阅服务。典型值为 pubsub.example.com,但这实际上取决于您的服务器配置。 node 获取您创建的节点的 ID。在某些服务器配置中,这具有语义含义(通常是路径),但可以尝试使用 mynode

可能是发送 iq 的用户不允许创建节点,或者服务不支持。如果有的话,只能根据错误节来判断,所以如果上述方法不起作用,请发布你得到的错误。

【讨论】:

Example.com 不能是服务。将您作为 pubsub 服务放入您的 ejabberd.cfg 中的任何内容 那么我在哪里可以在 ejabberd.cfg 中找到它,因为出于隐私原因,我在这里提到了example.com,实际上是它的nxxxxxxt.com,是否有任何特殊的地方可以在 .cfg 中为 pubsub 指定服务文件? 默认情况下,服务名称很可能已经是“pubsub”。那么您是否尝试过 pubsub.example.com。此外,ejabberd 过去需要一个分层节点名称(如文件路径),但我不知道是否仍然如此。 所以我必须写一些像/home/localhost/john/draw这样的文件路径到服务名称? 你被禁止了。尝试创建节点的用户无权这样做,您需要在 ejabberd.cfg 中配置权限。 @robin ejabberd 根据插件获取路径或简单键。

以上是关于在 xmpp 中创建一个 pubsub 节点的主要内容,如果未能解决你的问题,请参考以下文章

在存在接收已发布项目两次 ejabberd

xmpp pubsub 理解

在 asmack 中将项目发送到 pubsub 节点

xmpp pubsub service(XEP-0060) 收到订阅请求后能否创建节点?

尝试在 Google PubSub python 中创建主题订阅时出错

如何在Android中创建使Xmpp与XMPP服务器保持连接的服务?