У меня есть сервер primus, который работает на преобразователе sockjs. Я использую плагин primus-rooms для поддержки комнат. Присоединение к комнатам и выход из них проходят успешно, я могу отправлять сообщения клиентам, которые подключены к определенным комнатам.
В какой-то момент мне нужно получить всех подключенных клиентов в определенной комнате. Я хочу использовать это: https://github.com/cayasso/primus-rooms#primusroomroomclientsfn< /а>
primus.room('room').clients(fn);
Но функция fn всегда возвращает значение null, даже если к комнате, на которую я нацеливаюсь, подключены клиенты. Это моя реализация:
var remoteRoom = 'the_room_I_need_to_target';
primus.room(remoteRoom).clients(function(clients){
console.dir('primus clients in room ' + remoteRoom + ': ' + clients);
});
Нужно ли мне настраивать что-то дополнительно, чтобы запустить это? Я думаю, что мне нужно настроить адаптер для комнат, но я не уверен, что это делает и как это должно быть сделано.
Чтобы быть несколько полным, это моя первоначальная настройка Primus:
var app = require('express')();
var server = require('http').Server(app);
var Primus = require('primus');
var Rooms = require('primus-rooms');
var primus = new Primus(server, {transformer: 'sockjs', pathname: '/primus/my-room'});
primus.plugin('rooms', Rooms);
Я могу успешно присоединяться к комнатам и выходить из них. Присоединение и выход запускаются некоторыми действиями в клиенте:
primus.on('connection', function (spark) {
spark.on('data', function(data) {
data = data || {};
var action = data.action;
var roomToJoin = data.roomToJoin;
if ('join' === action) { //join room
spark.join(roomToJoin, function () {
logger.debug('primus id ' + spark.id + ' joined room ' + roomToJoin);
});
}else if ('leave' === action) { //leave room
spark.leave(roomToJoin, function () {
logger.debug('primus id ' + spark.id + ' left room ' + roomToJoin);
});
}
}