textプロトコル

Workermanはtextと呼ばれるテキストプロトコルを定義しています。このプロトコルのフォーマットは データパケット+改行文字 であり、データパケットの末尾に改行文字を加えることでパケットの終了を示します。

例えば、以下のbuffer1とbuffer2文字列はtextプロトコルに従っています:

// テキストに改行を追加
$buffer1 = 'abcdefghijklmn
';
// PHPにおいて、ダブルクオーテーション内の\nは改行文字を表します。例えば、"\n"
$buffer2 = '{"type":"say", "content":"hello"}'."\n";

// サーバーとソケット接続を確立
$client = stream_socket_client('tcp://127.0.0.1:5678');
// textプロトコルを使用してbuffer1データを送信
fwrite($client, $buffer1);
// textプロトコルを使用してbuffer2データを送信
fwrite($client, $buffer2);

textプロトコルは非常にシンプルで使いやすく、開発者が自身のプロトコルを必要とする場合、例えば、モバイルアプリとのデータ送信やハードウェアとの通信などに、textプロトコルを使用することを検討できます。開発とデバッグが非常に便利です。

textプロトコルのデバッグ

textプロトコルは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を使用してテストします(Linuxシステムのtelnetを使用することを推奨します)。

ローカルテストだと仮定すると、
ターミナルで telnet 127.0.0.1 5678 を実行し、その後 hi と入力して改行します。
データ 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