derbyparty/derby-faq

Количество подключенных пользователей к приложению

Closed this issue · 4 comments

Добрый день, в faq en есть такие строки

for (var id in app.clients) {
  app.clients[id].channel.send('myEvent', data);
}

в app.clients хранится объект подключенных к приложению пользователей, но если app не является глобальной переменной, допустим в production, то app.clients будет пустой.
Вопрос: где взять подключенных клиентов к серверу когда app не глобальна.

Привет,
это ведь код на серваке, поэтому app глобально можно без проблем в какую-то переменную засунуть (но только для сервака), точнее наверн даже в хэш, на серваке ведь все дербивские app'ы доступны; например в APPS.main, APPS.admin, APPS.promo

app = derby.createApp('main');
if( derby.util.isServer ) {
  APPS || (APPS = {});
  APPS.main = app;
}

Если же надо получить доступ к app на клиенте, то в любом компоненте текущий app находится в this:

init: function() {
  this.app.history.push();
}

я пытаюсь отправить сообщение всем подключенным клиентам с сервера, при каждом подключении нового клиента

store.on('client', function(client) {
  for (var id in user.clients) {
    user.clients[id].channel.send('message', data);
  }
});

все отлично работает пока на клиенте

var user = module.exports = derby.createApp('user', __filename);
global.user = user

как только user не глобальна сервер соответственно дает

> user is not defined

мне нужен доступ на сервере к "user" а в нем к user.clients

в вашем случае

app = derby.createApp('main');
if( !derby.util.isServer ) {
  APPS || (APPS = {});
  APPS.main = app;
}

APPS так же является глобальной переменной на клиенте, что не есть хорошо...

сори, я очепятался когда изначально отправил сообщение.
Засовываем в

if (derby.util.isServer) {
  // присваивание app в глобальную переменную.
}

и поскольку присвоение произойдет только на серваке, то на клиенте ничего не будет доступно глобально.

Ну да, логично, все понял, все работает. Мог бы и сам догадаться =)). Спасибо за быстрый ответ разъяснение!