0

我正在尝试使用 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">​&lt;query xmlns=​"http:​/​/​
jabber.org/​protocol/​muc#owner">​…​&lt;/query>​&lt;error code=​"404" type=​"cancel">​
<item-not-found xmlns=​"urn:​ietf:​params:​xml:​ns:​xmpp-stanzas">​&lt;/item-not-
found>​&lt;text xmlns=​"urn:​ietf:​params:​xml:​ns:​xmpp-stanzas">​Conference room 
does not exist​&lt;/text>​&lt;/error>​&lt;/iq>

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

4

1 回答 1

1

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

您的代码正在做的是:

  1. 它将存在发送到房间,这意味着您正在加入它。如果它不存在,它将被创建。
  2. 您尝试创建房间,但由于房间始终存在,因此应该始终失败。
  3. 你在问房间存放在哪里。除非它是持久的,否则它不会被存储,如果您没有配置 ejabberd 以将默认房间选项设置为持久,则在您的示例中不是这种情况。否则,您需要编辑XEP-0045 多用户聊天中定义的房间选项以使其持久化。持久房间存储在 Mnesia 表中muc_room
  4. createInstantRoom在 StropheJS MUC 插件中使用默认选项创建房间,就像加入一样,所以我不明白为什么在这里需要它。

所以,我无法告诉你你想用你的代码实现什么,但只需将存在发送到房间就足以创建一个非持久聊天室并加入它。无需调用createInstantRoom

于 2015-08-07T11:50:50.660 回答