Хочу прикрутить к существующему проекту написанному на PHP веб сокеты для чата и для обновления инфы о колличестве новых сообщений и таких мелочей. Хочу использовать пых для того что бы использовать уже написанную логику приложения (типа как добавлять Подскажите правильно ли я понимаю - 1) Веб сокет должен крутить на отдельном демоне. В нем Веб сервер никак не учавствует. Т.е. жрет память только пых. 2) Первый запрос это обычный GET/POST и уже потом он апгредится до WEBSOKET и висит уже так до закрытия вкладки браузера. 2.1.) Правильно ли я понимаю - что в момент установления коннекта в headere передатся cookies и session - т.е. можно определить что за пользователь подключился. Ведь если мы установили соединение с правильным юзером - это соединение можно считать безопасным? 2.2.) Или обязательно в каждом запросе нужно слать - token_ID 3) Как обычно реализуется (нужно обновлять конкретную переписку, и нужно обновлять общее число новых сообщений) - делается два демона, каждый для конкретной задачи? Или просто в сообщениях пишется заголовок? 4) Самый наверное важный вопрос - как с блокировками в PHP. Насколько я понял сам процесс работы вебсокетов должен крутиться в бесконечном цикле. Но в тот момент пока скрипт выполняет блокирующую операцию (например добавляет что то в базу или файл) стучится еще один пользователь. Что происходит? Пользователь просто не получает ответа? 5) Как можно вычислять уже закрытые соедение и их удалять? Что лучше выбрать - phpdaemon Ratchet Workerman или что то менее известное и лайтовое?
Лично я использую centrifugo как сервер веб-сокетов (потому что оно элементарно поднимается на любом сервере), и использую, когда мне надо передать что-то с сервера на клиент. С клиента на сервер передаю обычным post/get. По поводу блокировок - должна быть очень большая нагрузка, чтобы встроенные в базу механизмы не справились. Использую centrifugo, чтобы не заморачиваться с логикой работы с сокетами.
А как авторизация делается? Клитент запрашивает соедение - на сервере добавляется в массив (ну или иную структура данных) его ID (если у него открыта сессия) и это соединие соотносится с ID какогото пользователя? Соедение висит открытым. До конца работы.
послушаю ответы... а то мне надо делать сейчас комнату для вебинаров.. чат на сокетах, всякие всплывающие сообщения в реальном времени от ведущего курса... хз пока как делать)) пока жду музу))
Лично я фанат классики socket.io redis php. Еще мне нравится swoole но я до конца не разбирался. Вообще node понемногу все на себя забирает сокеты крон менеджер процессов сервисы мониторинг. Удобно. Еще немного и от остальных языков откажусь а то прям везде костыли.
У редиса есть pubsub https://redis.io/topics/pubsub на который node может подписаться нам ведь нужен риалтайм --- Добавлено --- А вообще нужно переходить на фреймворки в той же ларке есть laravel-echo-server авторизация на бродкасты очереди горизонт для мониторинга практически все с коробки
@Алекс8 Начни с документации. Там много классных вещей написано и о фреймворке и о жизни в целом) Просто немного по другом. Так везде.
да я давно хочу с ним познакомится)) но все время нет)) всегда что то надо делать срочно и быстро)) поэтому делаю с тем что знаю)) но оочень хочется его освоить)) сейчас вот надо кое что сделать - хотел взять Люмен)) но что то блин не то.. жалею что у Yii2 нет микро версии его))
@Алекс8, yii2 можно использовать как микрофреймворк. https://www.yiiframework.com/doc/guide/2.0/en/tutorial-yii-as-micro-framework Кстати, работает Yii гораздо быстрее и Lumen и Laravel
@Алекс8 ты только смотри оригинальную доку. Даже с переводом через гугл она лучше всяких su ru. А вот это не правда. В yii просто все по умолчанию отключено. Даешь реальные тесты одинаковых проектов после оптимизации и деплоя? Плюс есть swoole. И даже так https://github.com/swooletw/laravel-swoole
В Yii просто вместо тонны сервис-провайдеров один массив. Может с точки зрения канонов ООП оно и хуже, зато считать один файл быстрее, чем лазить по вендору, грузить сервис-провайдеры. Может, коненчо, я чего не умею, но у меня разогнать Laravel не получалось до цифр, которые даёт Yii2. А уж в с включённой отладкой так Laravel в разы медленнее, чем Yii2 (тоже с включённой отладкой)
@mkramer Я вот как раз писал сообщения за отладку) Она ужас какая прожерливая.. Просто в основном люди тестируют то что есть с коробки вот у них и получается x2 а на самом деле разница не такая большая. --- Добавлено --- Плюс это только пых. На нем нагрузка минимальная. Все эти очереди сокеты редисы базы и т.д вот о чем нужно волноваться.
Я поднимаю тему после "небольшого" перерыва. Начал разбираться - и не могу понять как можно определить какой конкретно пользователь подключился - ведь при подключении к веб сокету не передаются куки - соответсвенно сессия тоже неизвеста? Как лучше всего с этим обойтись?? Генерировать случайное скрытое поле для каждого раза когда пользователь открывает - Открыть чат?
я не стал особо заморачиваться)) человек проходит аутентификацию - в куках есть есть ID сессии... в момент аутентификации я в таблицу chat_users добавлю запись с его ником, номером комнаты и ИД сессии.. после аутентификации мы соединяемся с сокет сервером и отпряем ему ID комнаты, ID пользователя и его сессию, если все это совпало - тогда мы устанавливаем с ним соединение.. ну а отправка ему сообщений уже не проблема.... ведь в базе написано в какой он комнате находится с какой ID сессией и набором прав)