【问题标题】:pubsub publish to node success, retrieve from node failpubsub 发布到节点成功,从节点检索失败
【发布时间】:2009-10-14 12:57:18
【问题描述】:

下面显示我建议发布到节点调用“ghost2”

iq id="kB8dk-0" to="computer/2c10ee6b" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>admin@computer/Smack</jid></bind></iq>
<iq id="kB8dk-1" to="admin@computer/Smack" type="result"></iq>
<iq id="kB8dk-2" to="admin@computer/Smack" type="result"><query xmlns="jabber:iq:roster"><item jid="test" name="test" subscription="none"></item><item jid="test@computer" subscription="from"></item></query></iq>
<message id="admin@computer__admin@computer__ChWrY" to="admin@computer" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='null'><item id='ghost2'/></items></event></message>
<iq id="kB8dk-4" to="admin@computer/Smack" from="computer" type="result"></iq>
<iq id="kB8dk-5" to="admin@computer/Smack" from="computer" type="result"></iq>
<message id="ghost2__admin@computer__DGaLS" to="admin@computer" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='ghost2'><item id='testid2'><book xmlns="pubsub:test:book"><title>book x</title></book></item></items></event></message>

但是当我尝试从同一个节点订阅和检索时,我收到错误 404

<iq id="zpWDI-0" to="computer/b7fe68a8" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>test@computer/Smack</jid></bind></iq>
<iq id="zpWDI-1" to="test@computer/Smack" type="result"></iq>
<iq id="zpWDI-2" to="test@computer/Smack" type="result"><query xmlns="jabber:iq:roster"><item jid="admin@computer" name="test" subscription="to"><group>Friends</group></item><item jid="test" name="test" subscription="none"></item></query></iq>
<presence id="kB8dk-3" to="test@computer/Smack" from="admin@computer/Smack"></presence>
<message id="admin@computer__test@computer__tAVfB" to="test@computer/Smack" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='TestNode2323'><item id='2Ke42PVQ77iSCP0'><book xmlns="pubsub:test:book"><title>book x</title></book></item></items></event><x xmlns="jabber:x:delay" stamp="20091013T14:16:32"></x><addresses xmlns="http://jabber.org/protocol/address"><address type="replyto" jid="admin@computer/god"/></addresses></message>
<iq id="zpWDI-4" to="test@computer/Smack" from="computer" type="error"><query xmlns="http://jabber.org/protocol/disco#info" node="ghost2"></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

【问题讨论】:

    标签: java xmpp openfire smack


    【解决方案1】:

    您已收到已发布的项目:

    <book xmlns="pubsub:test:book"><title>book x</title></book>
    

    您已从“计算机”(您的 xmpp 服务器)收到此查询的 404 错误:

    <query xmlns="http://jabber.org/protocol/disco#info" node="ghost2"></query>
    

    这与服务发现有关。您是否有可能从整个对话中删除了一些消息?

    编辑:

    您可以尝试替换吗:

    PubSubManager manager = new PubSubManager(connection, "computer");
    

    有了这个

    String pubSubAddress = "pubsub." + connection.getServiceName();
    PubSubManager manager = new PubSubManager(connection, pubSubAddress);
    

    【讨论】:

    • 我认为您可能为了便于阅读而删除了一些消息,例如正如你的意思他们是无关的。但正如您在对上一个问题的评论中提到的那样:您将哪个库用于 pubsub?我也在使用 pubsub,但不必担心原始消息。
    • 我正在使用 smackx pubsub。你呢?
    • 另外,从响应中,“book x”来自节点“TestNode2323”..你能评论一下吗?
    【解决方案2】:

    也许这个例子可以作为你的参考:

    public void login(String Ip,String username,String passwaord)
         {
             try 
             {
                connConfig = new AndroidConnectionConfiguration(Ip, 5222);
                connection = new XMPPConnection(connConfig);
                connection.connect();  
                connection.login(username, passwaord);
                pubSubAddress = "pubsub."+ connection.getServiceName();
                manager = new PubSubManager(connection,pubSubAddress);
                Log.i("MyError","connection success");  
             }
             catch (XMPPException e) 
             {
                 Log.i("MyError","connection failed");      
                 e.printStackTrace();
             }
    
         }
    

    另外,您可以参考与您相关的another question

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      也许你可以参考这个例子:

      import org.jivesoftware.smack.XMPPConnection;
      import org.jivesoftware.smackx.pubsub.ItemPublishEvent;
      import org.jivesoftware.smackx.pubsub.Node;
      import org.jivesoftware.smackx.pubsub.PayloadItem;
      import org.jivesoftware.smackx.pubsub.PubSubManager;
      import org.jivesoftware.smackx.pubsub.listener.ItemEventListener;
      public class XmppPubsub_Reciever {
          private static XMPPConnection connection = new XMPPConnection("think");
          private static String USRE_NAME = "user";
          private static String PASSWORD = "1";
          static {
              try {
                  connection.connect();
                  connection.login(USRE_NAME, PASSWORD);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          public static void main(String[] args) throws Exception {
              String nodeId = "test";
              PubSubManager manager = new PubSubManager(connection);
              Node eventNode = manager.getNode(nodeId);
              eventNode.addItemEventListener(new ItemEventListener<PayloadItem>() {
                  public void handlePublishedItems(ItemPublishEvent evt) {
                      for (Object obj : evt.getItems()) {
                          PayloadItem item = (PayloadItem) obj;
                          System.out.println("--:Payload=" + item.getPayload().toString());
                      }
                  }
              });
              eventNode.subscribe(connection.getUser());
              while(true);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多