使用ejabberd创建聊天室StropheJS时出错

时间:2015-08-07 11:12:29

标签: javascript ejabberd strophe multiuserchat

我正在尝试使用StropheJS创建一个聊天室

我的代码:

var presence = $pres({ to:  "testRoom@conference@localhost/yashwanth, from: Strophe.getBareJidFromJid(connection.jid) });
     Groupie.connection.send( presence.tree());
    Groupie.connection.muc.createInstantRoom("testRoom@conference.localhost/yashwanth",
      function(status) {
        console.log("Room Created Successfully", status);
      },
      function(status) {
        console.log("Error Creating Room", status);
      });

在创建房间时,我面临以下错误。

我发现roomJID的格式应为room_name @ conference @ HOST @ / nickname。所以根据我发送的格式。但它并没有创造出这个空间。

Error Creating Room <iq xmlns=​"jabber:​client" from=​
"conference@conference.localhost" to=​"yashwanth@inst1.eab.com/​
5441440311438943022710601" type=​"error" id=​"1:​sendIQ">​<query xmlns=​"http:​/​/​
jabber.org/​protocol/​muc#owner">​…​</query>​<error code=​"404" type=​"cancel">​
<item-not-found xmlns=​"urn:​ietf:​params:​xml:​ns:​xmpp-stanzas">​</item-not-
found>​<text xmlns=​"urn:​ietf:​params:​xml:​ns:​xmpp-stanzas">​Conference room 
does not exist​</text>​</error>​</iq>

我使用ejabberd作为我的XMPP服务器。如果房间创建了哪个数据库能够保存与房间相关的详细信息?它是保存在muc_registered表还是muc_room表中?

1 个答案:

答案 0 :(得分:1)

要加入XMPP中的房间,您无需先创建它。

您的代码正在做什么:

  1. 它将存在发送到房间,这意味着您正在加入它。如果它不存在,它将被创建。
  2. 您尝试创建房间,因为房间始终存在,所以应始终失败。
  3. 您在询问房间的存放位置。除非它是持久的,否则不会存储它,如果您没有配置ejabberd将默认房间选项设置为持久性,则在您的示例中不是这种情况。否则,您需要编辑XEP-0045 Multi User Chat中定义的房间选项以使其保持持久性。持久房间存储在Mnesia表muc_room
  4. 中 StropheJS MUC插件中的
  5. createInstantRoom使用默认选项创建空间,就像加入一样,所以我不明白为什么需要它。
  6. 所以,我无法告诉你要用你的代码实现什么,但只是将状态发送到房间就足以创建一个非持久的聊天室并加入它。无需致电createInstantRoom