Роль коммуникационного протокола

Поскольку TCP базируется на потоке, данные запроса, отправленные клиентом, поступают на сервер, как вода. После обнаружения поступления данных сервер должен проверить, являются ли данные полными, поскольку на сервер могли поступить только части данных одного запроса или даже несколько запросов, соединенных вместе. Чтобы определить, все ли данные запроса поступили или разделить запросы, идущие вместе, необходимо установить набор коммуникационных протоколов.

Почему в Workerman необходимо устанавливать протокол?

Традиционная разработка на PHP основана на вебе и в основном использует протокол HTTP. Обработка и анализ протокола HTTP полностью возложены на веб-сервер, поэтому разработчики не задумываются о вопросах, связанных с протоколом. Однако, когда нам необходимо разрабатывать на основе не HTTP-протокола, разработчики должны учитывать эти вопросы.

Протоколы, поддерживаемые Workerman

На данный момент Workerman поддерживает протоколы HTTP, websocket, text (см. пояснение в приложении), frame (см. пояснение в приложении) и ws (см. пояснение в приложении). При необходимости общения на основе этих протоколов можно использовать их напрямую. Способ использования: указать протокол при инициализации Worker, например:

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// websocket://0.0.0.0:2345 указывает на то, что необходимо слушать порт 2345 с использованием протокола websocket
$websocket_worker = new Worker('websocket://0.0.0.0:2345');

// text протокол
$text_worker = new Worker('text://0.0.0.0:2346');

// frame протокол
$frame_worker = new Worker('frame://0.0.0.0:2347');

// tcp Worker, передача данных непосредственно по сокету, без использования каких-либо протоколов верхнего уровня
$tcp_worker = new Worker('tcp://0.0.0.0:2348');

// udp Worker, без использования каких-либо протоколов верхнего уровня
$udp_worker = new Worker('udp://0.0.0.0:2349');

// unix domain Worker, без использования каких-либо протоколов верхнего уровня
$unix_worker = new Worker('unix:///tmp/wm.sock');

Использование пользовательского коммуникационного протокола

Когда встроенные коммуникационные протоколы Workerman не удовлетворяют требованиям разработки, разработчики могут настроить свои собственные протоколы. Метод настройки будет описан в следующем разделе.

Замечание:

В Workerman встроен текстовый протокол, формат которого - текст + символ новой строки. Разработка и отладка text протокола крайне проста и может использоваться в подавляющем большинстве сценариев пользовательских протоколов, поддерживает отладку через telnet. Если разработчик хочет создать свой собственный протокол приложений, он может напрямую использовать текстовый протокол, не разрабатывая его отдельно.

Описание text протокола см. в разделе «Приложение Часть протокола Text».