text协议

Workerman定义了一种叫做text的文本协议,协议格式为 数据包+换行符,即在每个数据包末尾加上一个换行符表示包的结束。

例如下面的buffer1和buffer2字符串符合text协议

  1. // 文本加一个回车
  2. $buffer1 = 'abcdefghijklmn
  3. ';
  4. // 在php中双引号中的\n代表一个换行符,例如"\n"
  5. $buffer2 = '{"type":"say", "content":"hello"}'."\n";
  6. // 与服务端建立socket连接
  7. $client = new stream_socket_client('tcp://127.0.0.1:5678');
  8. // 以text协议发送buffer1数据
  9. fwrite($client, $buffer1);
  10. // 以text协议发送buffer2数据
  11. fwrite($client, $buffer2);

text协议非常简单易用,如果开发者需要一个属于自己的协议,例如与手机App传输数据或者与硬件通讯等等,可以考虑使用text协议,开发调试都非常方便。

text协议调试

text协议可以使用telnet客户端调试,例如下面的例子。

test.php

  1. require_once __DIR__ . '/Workerman/Autoloader.php';
  2. use Workerman\Worker;
  3. $text_worker = new Worker("text://0.0.0.0:5678");
  4. $text_worker->onMessage = function($connection, $data)
  5. {
  6. var_dump($data);
  7. $connection->send("hello world");
  8. };
  9. Worker::runAll();

执行php test.php start显示如下

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

重新打开一个终端,利用telnet测试(建议用linux系统的telnet)

假设是本机测试,
终端执行 telnet 127.0.0.1 5678
然后输入 hi回车
会接收到数据hello world\n

  1. telnet 127.0.0.1 5678
  2. Trying 127.0.0.1...
  3. Connected to 127.0.0.1.
  4. Escape character is '^]'.
  5. hi
  6. hello world