作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在创建一个聊天网站,我正在使用 Strophe.js 和 Strophe.muc.js 插件。单人聊天功能运行良好,但我也不想实现群聊功能,用户可以在其中创建房间并邀请其他用户加入他们的房间。使用 muc 插件,我可以创建一个房间,但问题是,除非我不配置它(我猜),否则其他用户无法加入并且房间不会持久存在。我知道 muc 插件有配置方法,但我不知道如何创建配置 Form 对象,我不知道它应该是什么样子。这将是我的第一个问题。第二:是否有可能我加入多个房间并从我所在的所有房间收到消息?如果没有,那么就没有必要回答我的第一个问题......
最佳答案
在尝试了 Mark S 的解决方案后,我发现我必须先发送在线状态才能创建房间。我在下面列出了整个代码,希望这对您有所帮助。
//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); });
我发现如果我不发送任何配置,openfire的即时消息服务器只会将房间写入缓存,而不是数据库,所以重启即时消息服务器后房间就会消失。
关于javascript - Strophe.js MUC : creating a room and joining more than one room,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20612063/
我是一名优秀的程序员,十分优秀!