Количество подключенных пользователей к приложению
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 в глобальную переменную.
}
и поскольку присвоение произойдет только на серваке, то на клиенте ничего не будет доступно глобально.
Ну да, логично, все понял, все работает. Мог бы и сам догадаться =)). Спасибо за быстрый ответ разъяснение!