Primus + primus-rooms + sockjs:如何检索连接到房间的所有客户端
Primus + primus-rooms + sockjs: How to retrieve all clients connected to a room
我有一个 primus 服务器 运行 在 sockjs 转换器上。我正在使用 primus-rooms 插件来支持房间。加入和离开房间成功,我可以向连接到特定房间的客户端发送消息。
有时我需要检索特定房间中所有已连接的客户端。我想用这个:https://github.com/cayasso/primus-rooms#primusroomroomclientsfn
primus.room('room').clients(fn);
但 fn 函数始终 return 为空,即使有客户端连接到我定位的房间。这是我的实现:
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);
});
}
}
处理函数是 fn(error, clients) 而不是 fn(clients)。将代码更改为以下内容会导致预期的行为:
var remoteRoom = 'the_room_I_need_to_target';
primus.room(remoteRoom).clients(function(error, clients){
console.dir('primus clients in room ' + remoteRoom + ': ' + clients);
});
我有一个 primus 服务器 运行 在 sockjs 转换器上。我正在使用 primus-rooms 插件来支持房间。加入和离开房间成功,我可以向连接到特定房间的客户端发送消息。
有时我需要检索特定房间中所有已连接的客户端。我想用这个:https://github.com/cayasso/primus-rooms#primusroomroomclientsfn
primus.room('room').clients(fn);
但 fn 函数始终 return 为空,即使有客户端连接到我定位的房间。这是我的实现:
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);
});
}
}
处理函数是 fn(error, clients) 而不是 fn(clients)。将代码更改为以下内容会导致预期的行为:
var remoteRoom = 'the_room_I_need_to_target';
primus.room(remoteRoom).clients(function(error, clients){
console.dir('primus clients in room ' + remoteRoom + ': ' + clients);
});