Зачем использовать Redis для связи через веб-сокет?

Пожалуйста, помогите мне прояснить некоторую путаницу.

Laravel позволяет общаться с socket.io, настроив redis:

https://laravel.com/docs/5.4/broadcasting#configuration

Насколько я понимаю, Redis просто хранит данные в памяти что-то похожее на memcached? Это позволяет стороннему программному обеспечению, например socket.io, собирать данные. Это действительно поведение websocket, хотя?

Я знаю, что вы также можете сделать что-то подобное в PHP:

$address = 'localhost';
$port = 5600;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);

Почему бы им не выбрать что-то выше, вместо того, чтобы настроить Redis? Вероятно, есть хороший ответ на этот вопрос, но у меня нет такого большого опыта ни с Redis, ни с веб-сокетами.

Любая информация по этому вопросу будет оценена.

0

Решение

Вам нужно подумать о постоянстве соединения. Запрос в Laravel живет только в течение времени, необходимого для получения ответа. После отправки ответа приложение закрывается до тех пор, пока новый запрос не достигнет index.php и Laravel снова загрузится.

Так что на самом деле вы не можете установить постоянное соединение таким образом. Например, Socket.io позволит вам подключиться к услуге и оставаться на связи. В этом основное отличие подхода Rest и Websocket. В интерфейсе отдыха клиент постоянно опрашивает сервер … Так что если у вас есть 1000 клиентов, у вас есть 1000 маленьких надоедливых клиентов, спрашивающих вас, есть ли у вас что-нибудь новое каждые 30 секунд … раздражает в лучшем случае. Но каждый раз, когда они спрашивают, Laravel проходит весь процесс загрузки / выключения … ничто не является постоянным.

Теперь при использовании Socket.io через службу Node каждый клиент будет подключаться и иметь постоянное подключение к экземпляру Node (который является одним постоянным потоком … лучше подходит для этого) … Имея это подключение к 1000 клиентам, клиенты просто слушают сокет для чего-то нового …

Когда запрос Laravel создает событие, представляющее интерес для 1000 клиентов, он просто отправляет информацию в очередь Redis … Экземпляр Node считывает из очереди Redis и может выполнять широковещательную передачу для подключенного клиента 1000, поскольку он поддерживает соединение. ..

Это хорошее использование технологий PHP и Node, поскольку оно подчеркивает сильные стороны обоих …

Надеюсь это поможет…

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector