Текстовый протокол

Workerman определяет текстовый протокол, называемый text. Формат протокола состоит из пакета данных+перевода строки, то есть добавление перевода строки в конце каждого пакета данных, чтобы указать конец пакета.

Например, строки buffer1 и buffer2 ниже соответствуют текстовому протоколу:

// Текст с переводом строки
$buffer1 = 'abcdefghijklmn
';
// В двойных кавычках в PHP \n представляет собой перевод строки, например, "\n"
$buffer2 = '{"type":"say", "content":"hello"}'."\n";

// Установка соединения с сервером через сокет
$client = stream_socket_client('tcp://127.0.0.1:5678');
// Отправка данных буфера1 по текстовому протоколу
fwrite($client, $buffer1);
// Отправка данных буфера2 по текстовому протоколу
fwrite($client, $buffer2);

Текстовый протокол очень прост в использовании. Если разработчику нужен собственный протокол, например, для передачи данных между мобильным приложением и оборудованием, то текстовый протокол может быть хорошим выбором, поскольку он очень удобен для разработки и отладки.

Отладка текстового протокола

Текстовый протокол можно отлаживать с помощью клиента telnet, как показано в следующем примере:

Создайте файл test.php.

require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;

$text_worker = new Worker("text://0.0.0.0:5678");

$text_worker->onMessage =  function($connection, $data)
{
    var_dump($data);
    $connection->send("hello world");
};

Worker::runAll();

Запустите команду php test.php start и появится следующий вывод.

php test.php start
Workerman[test.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.2.7          PHP version:5.4.37
------------------------ WORKERS -------------------------------
user          worker        listen                         processes status
root          none          myTextProtocol://0.0.0.0:5678   1         [OK]
----------------------------------------------------------------
Press Ctrl-C to quit. Start success.

Откройте новый терминал и выполните тест с помощью telnet (рекомендуется использовать telnet в системе Linux).

Предположим, что тест производится на локальной машине,
введите в терминале: telnet 127.0.0.1 5678
затем введите hi и нажмите Enter
Вы получите ответ "hello world\n"

telnet 127.0.0.1 5678
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hi
hello world