text 协议
Workerman 定义了一种叫做 text 的文本协议,协议格式为
数据包+换行符
,即在每个数据包末尾加上一个换行符表示包的结束。
例如下面的 buffer1 和 buffer2 字符串符合 text 协议:
php
// 文本加一个回车
$buffer1 = 'abcdefghijklmn
';
// 在php中双引号中的\n代表一个换行符,例如"\n"
$buffer2 = '{"type":"say", "content":"hello"}'."\n";
// 与服务端建立socket连接
$client = stream_socket_client('tcp://127.0.0.1:5678');
// 以text协议发送buffer1数据
fwrite($client, $buffer1);
// 以text协议发送buffer2数据
fwrite($client, $buffer2);
text 协议非常简单易用,如果开发者需要一个属于自己的协议,例如与手机 App 传输数据或者与硬件通讯等等,可以考虑使用 text 协议,开发调试都非常方便。
text 协议调试
text 协议可以使用 telnet 客户端调试,例如下面的例子:
新建文件 test.php
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