yii-node-socket
yii-node-socket copied to clipboard
list users
может вы подскажите как получить id всех юзеров, что онлайн?
Добрый день, на данный момент никак) можете дописать и сделать метод который будет это отдавать, при авторизации или конннекте(если он залогинен) ложить юзера в массив при дискеннекте удалять
Отправлено с моего Xiaomi
Сообщение от "strafun [email protected]":
может вы подскажите как получить id всех юзеров, что онлайн?
— Reply to this email directly or view it on GitHub.
допишу обязательно. но есть вопрос я понимаю как его добавить socket.room('testRoom').join(function (success, numberOfRoomSubscribers) { на клиенте по принципу как мы меняем numberOfRoomSubscribers. но не совсем понимаю как добавить $frame = Yii::app()->nodeSocket->getFrameFactory()->createAuthenticationFrame(); $frame->setUserId($this->getId()); $frame->send(); на этом этапе чтобы потом на фронтенде получать эти айди.
Привед, тут сервер дописывать надо, на клиенте всего лишь можно вызвать 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.
ну и еще в догонку вопрос, как отследить что один из пользователей ушел из чата. и ушел не по клику на ивент а например закрыл окно...
Встречный вопрос, отследить на клинте в джс? На сервере ноды?
Отправлено с моего Xiaomi
Сообщение от "strafun [email protected]":
ну и еще в догонку вопрос, как отследить что один из пользователей ушел из чата. и ушел не по клику на ивент а например закрыл окно...
— Reply to this email directly or view it on GitHub.
на сервере наверное лучше. человек отконекчивается, ждем 10 секунд если не приконектился то пишем в базу. но тогда нужно задействовать работу с бд на сервере. кстати по этому поводу, что нибуть реализовано кроме подключения бд в крнфиге? и еще один вопрос есть возможность по запросу закрывать комнату?
В базу писать накладно может выйти, проще в памяти хранить или в общем хранилище, в памяти но в редисе или мемкеше, хранить джсон можно и его обновлять, тогда и в php будешь знать кто онлайн
Отправлено с моего Xiaomi
Сообщение от "strafun [email protected]":
на сервере наверное лучше. человек отконекчивается, ждем 10 секунд если не приконектился то пишем в базу. но тогда нужно задействовать работу с бд на сервере. кстати по этому поводу, что нибуть реализовано кроме подключения бд в крнфиге? и еще один вопрос есть возможность по запросу закрывать комнату?
— Reply to this email directly or view it on GitHub.
хорошая идея. но они же не стабильные что редис что мемкеш... ну да ладно что - нибуть придуаю. а по поводу закрыть комнату - что посоветуете?
Почему же нет, редис на диск сбрасывать может, настройки глянь и реаликация есть в нем
Отправлено с моего Xiaomi
Сообщение от "strafun [email protected]":
хорошая идея. но они же не стабильные что редис что мемкеш... ну да ладно что - нибуть придуаю. а по поводу закрыть комнату - что посоветуете?
— Reply to this email directly or view it on GitHub.
Что бы закрыть комнату нужно всего лишь вмсех юзеров оттуда выкинуть, соответственно достать все сокеты в комнате и сделать
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.
спасибо большое - это же на сервере, я правильно понял? могу добавить в проект возможность хранить на сервере данные и вырубать по запросу комнату. еще заметил такую фичу что не всегда происходит коннект в комнату доходит до Tying to join in room ... и все. с чем может быть связано данное поведение?
Да на сервере, пожалуйста
Возможно еще нет подключения к сокету, можно попробовать весь код обернуть в функцию 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.
помогло. спасибо. и немного к вопросам о каналах. var testChannel = socket.channel('test').join( вот так у меня пытается присоединится и не присоединяется я так понял что сначала нужно канал создать на бекенде? а потом в него конектиться?
и канал это какбы транясятор - туда пишет только 1 человек?
Ну как бы да, только не один человек а в любом месте в php можно в любой канал отправить месагу, сделано так что у каждого юзера свой канал
Канал это посути комната, только прочитают мессаги те кто подписан на канал
Отправлено с моего Xiaomi
Сообщение от "strafun [email protected]":
и канал это какбы транясятор - туда пишет только 1 человек?
— Reply to this email directly or view it on GitHub.