Strophe.js MUC:创建一个房间并连接多个房间

Strophe.js MUC: creating a room and joining more than one room

本文关键字:房间 一个 连接 MUC js 创建 Strophe      更新时间:2023-09-26

我正在创建一个聊天网站,我正在使用Strophe.js和Strophe.muc.js插件。单聊功能很好,但我也不想实现群聊功能,用户可以创建房间并邀请其他用户到他们的房间。使用muc插件,我可以创建一个房间,但问题是,除非我不配置它(我想),否则其他用户无法加入,而且房间也不持久。我知道muc插件有配置方法,但我不知道如何创建configForm对象,我不知道它应该是什么样子。这将是我的第一个问题。第二:我有可能加入多个房间,并从我所在的所有房间收到消息吗?如果没有,那么就没有必要回答我的第一个问题。。。

在尝试了Mark S的解决方案后,我发现我必须先发送presence才能创建房间。我在下面列出了整个代码,希望这能有所帮助。

//before executing the code below, you need to connect to IM server (var conn is Strophe.Connection)
var userName = "steve",
    serverName = "example.com",
    userJid = userName + '@' + serverName,
    roomJid = 'testRoom' + '@conference.' + serverName,
    iq;
//send presence first for creating room
var d = $pres({'from': userJid, 'to': roomJid + '/' + userName})
conn.send(d.tree());
iq = $iq({
    to: roomJid,
    type: 'set'
}).c("query", {
    xmlns: Strophe.NS.MUC_OWNER
});
iq.c("x", {
    xmlns: "jabber:x:data",
    type: "submit"
});
//send configuration you want
iq.c('field', { 'var': 'FORM_TYPE' }).c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up();
iq.c('field', { 'var': 'muc#roomconfig_publicroom' }).c('value').t('1').up().up();
conn.sendIQ(iq.tree(), function () { console.log('success'); }, function (err) { console.log('error', err); });

我发现,如果我不发送任何配置,打开的即时消息服务器只会将房间写入缓存,而不会写入数据库,因此在重新启动即时消息服务器后,房间将消失。

  1. 默认情况下,您可以在jabber服务器上将房间设置为持久
  2. 创建房间需要两个步骤。首先创建房间,然后配置房间
  3. 你可以加入任意多个房间

房间配置类似于(如果您检查服务器的响应,您将在可用字段的第一步获得一个表单)。

第二步看起来像:

var iq, stanza;
iq = $iq({
    to: newroomjid,
    type: "set"
}).c("query", {
    xmlns: Strophe.NS.MUC_OWNER
});
iq.c("x", {
    xmlns: "jabber:x:data",
    type: "submit"
});
iq.c('field', { 'var': 'FORM_TYPE' }).c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up();
iq.c('field', { 'var': 'muc#roomconfig_roomname' }).c('value').t(roomName).up().up();
stanza = iq.tree();