yii-node-socket icon indicating copy to clipboard operation
yii-node-socket copied to clipboard

list users

Open strafun opened this issue 9 years ago • 15 comments

может вы подскажите как получить id всех юзеров, что онлайн?

strafun avatar Sep 02 '15 00:09 strafun

Добрый день, на данный момент никак) можете дописать и сделать метод который будет это отдавать, при авторизации или конннекте(если он залогинен) ложить юзера в массив при дискеннекте удалять

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

может вы подскажите как получить id всех юзеров, что онлайн?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 02 '15 04:09 oncesk

допишу обязательно. но есть вопрос я понимаю как его добавить socket.room('testRoom').join(function (success, numberOfRoomSubscribers) { на клиенте по принципу как мы меняем numberOfRoomSubscribers. но не совсем понимаю как добавить $frame = Yii::app()->nodeSocket->getFrameFactory()->createAuthenticationFrame(); $frame->setUserId($this->getId()); $frame->send(); на этом этапе чтобы потом на фронтенде получать эти айди.

strafun avatar Sep 02 '15 09:09 strafun

Привед, тут сервер дописывать надо, на клиенте всего лишь можно вызвать emit('api.clients.online', null, function(clients) {console.log(clients)}) а на сервере реализовать обработчик этого события, что то вроде этого

socket.on('api.clients.online', function (data, fn) { fn(и тут можно вставить переменную в которой будут какие либо данные); });

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

допишу обязательно. но есть вопрос я понимаю как его добавить socket.room('testRoom').join(function (success, numberOfRoomSubscribers) { на клиенте по принципу как мы меняем numberOfRoomSubscribers. но не совсем понимаю как добавить $frame = Yii::app()->nodeSocket->getFrameFactory()->createAuthenticationFrame(); $frame->setUserId($this->getId()); $frame->send(); на этом этапе чтобы потом на фронтенде получать эти айди.

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 02 '15 17:09 oncesk

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

strafun avatar Sep 02 '15 17:09 strafun

Встречный вопрос, отследить на клинте в джс? На сервере ноды?

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

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

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 02 '15 18:09 oncesk

на сервере наверное лучше. человек отконекчивается, ждем 10 секунд если не приконектился то пишем в базу. но тогда нужно задействовать работу с бд на сервере. кстати по этому поводу, что нибуть реализовано кроме подключения бд в крнфиге? и еще один вопрос есть возможность по запросу закрывать комнату?

strafun avatar Sep 02 '15 22:09 strafun

В базу писать накладно может выйти, проще в памяти хранить или в общем хранилище, в памяти но в редисе или мемкеше, хранить джсон можно и его обновлять, тогда и в php будешь знать кто онлайн

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

на сервере наверное лучше. человек отконекчивается, ждем 10 секунд если не приконектился то пишем в базу. но тогда нужно задействовать работу с бд на сервере. кстати по этому поводу, что нибуть реализовано кроме подключения бд в крнфиге? и еще один вопрос есть возможность по запросу закрывать комнату?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 03 '15 07:09 oncesk

хорошая идея. но они же не стабильные что редис что мемкеш... ну да ладно что - нибуть придуаю. а по поводу закрыть комнату - что посоветуете?

strafun avatar Sep 03 '15 10:09 strafun

Почему же нет, редис на диск сбрасывать может, настройки глянь и реаликация есть в нем

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

хорошая идея. но они же не стабильные что редис что мемкеш... ну да ладно что - нибуть придуаю. а по поводу закрыть комнату - что посоветуете?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 03 '15 11:09 oncesk

Что бы закрыть комнату нужно всего лишь вмсех юзеров оттуда выкинуть, соответственно достать все сокеты в комнате и сделать

socket.leave('room name')

Что то вроде этого для каждого сокета в этой комнате, что найти все сокеты в комнате

io.in('some room').sockets

Как то так точно не помню какая там переменная

Код

io.in('testroom').sockets.forEach(function () { this.leave('room which must be closed'); })

Только не помню какой контекст внутри forEach

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

хорошая идея. но они же не стабильные что редис что мемкеш... ну да ладно что - нибуть придуаю. а по поводу закрыть комнату - что посоветуете?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 03 '15 11:09 oncesk

спасибо большое - это же на сервере, я правильно понял? могу добавить в проект возможность хранить на сервере данные и вырубать по запросу комнату. еще заметил такую фичу что не всегда происходит коннект в комнату доходит до Tying to join in room ... и все. с чем может быть связано данное поведение?

strafun avatar Sep 03 '15 12:09 strafun

Да на сервере, пожалуйста

Возможно еще нет подключения к сокету, можно попробовать весь код обернуть в функцию onConnect

var socket = new YiiNodeSocket();

socket.onConnect(function () { // fire when connection established И тут поместить код });

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

спасибо большое - это же на сервере, я правильно понял? могу добавить в проект возможность хранить на сервере данные и вырубать по запросу комнату. еще заметил такую фичу что не всегда происходит коннект в комнату доходит до Tying to join in room ... и все. с чем может быть связано данное поведение?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 03 '15 13:09 oncesk

помогло. спасибо. и немного к вопросам о каналах. var testChannel = socket.channel('test').join( вот так у меня пытается присоединится и не присоединяется я так понял что сначала нужно канал создать на бекенде? а потом в него конектиться?

strafun avatar Sep 03 '15 16:09 strafun

и канал это какбы транясятор - туда пишет только 1 человек?

strafun avatar Sep 03 '15 16:09 strafun

Ну как бы да, только не один человек а в любом месте в php можно в любой канал отправить месагу, сделано так что у каждого юзера свой канал

Канал это посути комната, только прочитают мессаги те кто подписан на канал

Отправлено с моего Xiaomi

Сообщение от "strafun [email protected]":

и канал это какбы транясятор - туда пишет только 1 человек?

— Reply to this email directly or view it on GitHub.

oncesk avatar Sep 03 '15 17:09 oncesk