Как websocket работает в php
у меня есть такие сомнения, например, у меня есть сервер, написанный на PHP.
Когда пользователь A
подключается к серверу, сервер выполняет действие, которое занимает 4 секунды, например, если раньше этого срока новый пользователь B
подключиться, и он будет ожидать выполнения пользовательских A
в конечном итоге, прежде чем сделать его исполнения? или как это работает? я потерян.
я Не знаю, если он мне не понять..
1 answers
WebSocket
Websockets процесс очень похож на обычный HTTP, но разница в том, что не закрыли соединение, и не нужно приказать серверу, чтобы знать, когда есть что-то новое, событие внутри ws
получает сигналы или данные непосредственно с сервера.
, Если написать websocket основной, вероятно, он будет синхронным, если пользователь A
передать что-то очень долго, вероятно, процесс будет "остановлен" до конца, но в время передачи профессионалы других пользователей, длинный сообщение пользователю A
и все получат то же время, вероятно.
Тем не менее, читая о ratchetphp/Ratchet
, более конкретно это сообщение:
-
Https://github.com/ratchetphp/Ratchet/issues/214#issuecomment-49737414
Он утверждает, что
Ratchet
асинхронный и указывает две ссылки. Если вы посмотрите на репозиторий https://github.com/reactphp/socket увидите следующее описание::Asynchronous socket server (ru: асинхронный сокет-Сервера)
И в ссылке, содержащейся в комментариях github, имеется возможность использовать "процесс детей":
-
Https://github.com/reactphp/child-process)
И там, в хранилище находится следующее описание:
Asynchronous ChildProcess (ru: Процесс детей, async)
Пример использование:
$loop = React\EventLoop\Factory::create(); $process = new React\ChildProcess\Process('echo foo'); $process->on('exit', function($exitCode, $termSignal) { // ... }); $loop->addTimer(0.001, function($timer) use ($process) { $process->start($timer->getLoop()); $process->stdout->on('data', function($output) { // ... }); }); $loop->run();
Итог:, То, как websockets работают в PHP будет зависеть от того, как код был написан reactphp
уже является асинхронным, и по-прежнему поддерживает child-process
, затем с помощью библиотеки, пользователь B
не нужно будет ждать, пока пользователь A
, любя, силы взаимодействия с websockets.
socket в php работает так же, как сокет нормально, мы обычно используем fsockopen
stream
, или даже другие библиотеки, такие как curl
.
PHP написан на C++, поэтому, вероятно, будет зависеть от того, что расширение php, вы имеете в виду. Но основным является он подключается через сокет, будет зависеть только от вас, как разработчика, установки, например мне сделать один HTTP-запрос необходимо сделать запрос по TCP.
Серверов HTTP
, Но если вы хотите понять, как работает управление запросов клиентов к серверу "нормальный", который использует PHP (обслуживается производства), я должен сказать вам, что это не php, который управляет этим, но да Apache Nginx lightTPD, которые являются HTTP-серверов.
- обратите Внимание, что PHP back-end HTTP-сервера, так как вместо PHP, вы можете использовать Python или другие интерпретаторы/компиляторы, поэтому PHP отвечает на HTTP-сервер, и этот же сервер, который отвечает на клиент (браузер пользователя).
Как Apache, как другие разделяют серверов запросы childs
(являются своего рода "поток"), в apache процесса является синхронным, но все еще имеет несколько детей, что позволяет нескольким людям доступ без необходимости что ждите другого. Можно настроить ограничения в родном Apache, помните, чем выше порог больше памяти потребуется.
Уже серверы Ngnix и lightTPD, говорят, что асинхронные, которые, вероятно, делит по-другому все childs
и обеспечивает большее число пользователей доступ в то же время, но, да, это все еще используется эти childs
.
Childs, как потоки или подпроцессы, соединения, вероятно, разделено между эти подпроцессы и возвращаются позже.
Каждый тип сервера есть свой собственный способ управления соединениями и вернуть ответ, запросов, это также может изменяться в зависимости от типа сервера, в качестве сервера, который использует ядро Linux, либо сервер под управлением Windows.
, Но в основной пользователь B
нужно ждать A
и в конечном итоге его выполнения.