2017-08-03 68 views
0

我有一個運行在sockjs變壓器上的primus服務器。我正在使用primus房間插件來支持房間。加入和離開房間是成功的,我可以向連接到特定房間的客戶發送消息。Primus + primus-rooms + sockjs:如何檢索連接到房間的所有客戶端

在某些時候,我需要檢索特定房間中的所有連接的客戶端。我想用這樣的: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); 
}); 

我是否需要配置額外的東西才能使其運行?我想我需要爲房間配置一個適配器,但我不確定它的功能和應該如何完成。


是有點完整的,這是我的博智初始設置:

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); 

     }); 
    } 
} 

回答

0

該處理函數FN(錯誤,客戶端),而不是FN(客戶端)。將代碼更改爲以下會導致預期的行爲:

var remoteRoom = 'the_room_I_need_to_target'; 
primus.room(remoteRoom).clients(function(error, clients){ 
    console.dir('primus clients in room ' + remoteRoom + ': ' + clients); 
}); 
相關問題