Что использовать для создания межпользовательских сообщений(диалоги).

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Tagir1111111111
Сообщения: 21
Зарегистрирован: 2016.01.07, 21:47

Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение Tagir1111111111 »

Что использовать для создания межпользовательских сообщений(диалоги). Определенно вебсокеты, но остоваться ли на PHP(ratchet, zmq) или интегрировать Yii2 с node.js? Почему думаю в сторону node.js мало материала как сделать на php.
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение zabachok »

Норм материала. Даже готовый пример есть https://packagist.org/packages/consik/yii2-websocket
2b||!2b Just read the instructions
Tagir1111111111
Сообщения: 21
Зарегистрирован: 2016.01.07, 21:47

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение Tagir1111111111 »

Там пример только простого чата. Это в ratchet есть. А как на счет отправки сообщения определенному пользователю.
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение zabachok »

Чет я перепутал. Вот другой репозиторий который я использовал: https://github.com/morozovsk/yii2-websocket
Вот тут от него примеры: https://github.com/morozovsk/websocket-examples
Посмотрите, там у каждого пользователя есть свой $connectionId. Для рассылки сообщения всем они делают так:

Код: Выделить всё

        foreach ($this->clients as $clientId => $client) {
            $this->sendToClient($clientId, $message);
        }
Соответственно чтоб отправить сообщение конкретному пользователю надо сделать так: $this->sendToClient($connectionId, $message);
2b||!2b Just read the instructions
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение zabachok »

$connectionId приходит в методы onOpen и onClose. В них можно положить этот идентификатор куда нить в кэш и так определять какое соединение соответствует конкретному пользователю.
2b||!2b Just read the instructions
Tagir1111111111
Сообщения: 21
Зарегистрирован: 2016.01.07, 21:47

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение Tagir1111111111 »

Ну а если очень много пользователей и каждый с кем то общается. И все это в одном foreach. Вообще это правильный подход? Я что то читал про многопоточность. Или все таки node.js и redis?
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение zabachok »

node.js однопоточный.
"если очень много пользователей и каждый с кем то общается"
Отправляйте сообщения не всем, только тем кто общается друг с другом.
2b||!2b Just read the instructions
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение zabachok »

Что вы хотите что бы я вам ответил на ваши вопросы?
2b||!2b Just read the instructions
Tagir1111111111
Сообщения: 21
Зарегистрирован: 2016.01.07, 21:47

Re: Что использовать для создания межпользовательских сообщений(диалоги).

Сообщение Tagir1111111111 »

Можно как то разделить форкнуть foreach. Я и сам запутался не много. Php многопоточный но однопоточный в плане выполнения скриптов?
Ответить