Задать вопрос
svisch
@svisch

Можно ли настроить запросы к php через вебсокет и http одновременно?

Приветствую. Заранее прошу прощения за возможно корявые вопросы, т.к. с технологией вебсокетов знаком лишь поверхностно. Гугл особо ничего не дал.
Итак, имеем php-fpm, nginx на сервере. В веб приложении на одной из страниц, на мой взгляд, напрашивается взаимодействие клиента и сервера через ws. Собственно созрело пару вопросов на эту тему:
1. Php вообще подходит для этого или на нем будет это в виде костылей?
2. Eсли 1п. да, можно ли одновременно настроить серверную часть на http и ws? Если да, то какие рекомендации и ньюансы могут быть по настройке.
3. Вебсокет и unix сокет - это не связанные вещи? (на всякий случай спрашиваю, понимаю, что скорее всего разные). Не обязательна ли конфигурация через unix сокет для настройки ws или тут устроит tcp взаимодействие nginx и php-fpm?
  • Вопрос задан
  • 818 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Разумеется можно. Никаких нюансов в одновременной работе нет, поскольку тут нет никакой "одновременности". php-fpm и websocket - это два разных сервиса, которые могут располагаться на одном и том же сервере или на разных, но в любом случае никак не пересекаются. В добавление к текущему веб-серверу вы просто запускаете вебсокет сервер и посылаете на него вебсокет запросы из браузера.

Ну то есть вам всего лишь надо осознать, что никакой одновременности нет, а дальше просто поставить вебсокет сервер, например workerman, и написать код, который по запросу будет соединяться с БД, получать нужную инфу и отправлять клиенту.

1. Да.
2. Как говорилось выше - можно. Любой сервер в сети по определению обеспечивает работу множества сервисов, количество которых ограничено только количеством свободных портов. Можно поставить два веб-сервера и пять вебсокет серверов.
3. Нет, разумеется. unix сокет это как раз внутренняя кухня сервера, но мы же говорим о сетевом взаимодействии. А tcp взаимодействие nginx и php-fpm тут вообще не при чём.
Ответ написан
3. Вебсокет и unix сокет - это совершенно разные вещи. Websockets - это протокол обмена информацией по TCP/IP.
Как работают websockets:
- Клиент начинает с простого HTTP запроса с просьбой апгрейднуться до websockets.
- Сервер соглашается, и тогда между Клиентом и Сервером устанавливается постоянное TCP/IP соединение, по которому данные могут ходить туда-обратно по протоколу websockets уже без кучи церемониальных ритуалов, как принято в обычном HTTP.

1. Изначально PHP совершенно не подходил для постоянного соединения, потому что он создавался как скриптовый язык. Скрипт должен был отработать один раз и почистить все следы своего выполнения. Поэтому создатели особо не заботились об утечках памяти и т.д. В результате было очень обременительно создавать постоянно-живущие процессы, необходимые для websockets. Но в настоящее время PHP очень сильно развивается, разработчики уделяют очень много внимания такому сценарию использования языка. PHP стал производительнее и гораздо надёжнее работает с памятью. Однако, напрямую реализовывать долгоживущий сервис самому всё еще муторно, поэтому лучше всего использовать отличные сторонние фреймворки/библиотеки.

2. Что можно использовать:
- Ratchet
- Swoole / OpenSwoole
- Workerman

У каждой из этих асинхронных библиотек/фреймворков есть свои особенности и нюансы. Но это всё очень хорошо описано в их документации, так что просто следуйте тому, что там написано, и не волнуйтесь. Советовать что-то одно не буду, потому что на вкус и цвет все фломастеры разные, и выберете то, что будет отвечать вашим конкретным задачам.
Ответ написан
@rPman
Да, подходит.

websocket это расширение http запроса, т.е. там добавляются специфические заголовки и можно отправлять туда-сюда пакеты в одном соединении.

Для этого приложение на php нужно реализовывать в виде http сервера (готовых библиотек тьма, включая штатные расширения), рекомендуется использовать swoole ну или по старинке на сокетах (библиотеки phpreact)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы