💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
[Crontab定时任务-workerman手册](https://www.workerman.net/doc/workerman/protocols/how-protocols.html) [一些例子-workerman手册](https://www.workerman.net/doc/workerman/protocols/example.html) **Worker监听自定义协议的端口** 最终的目录结构 ~~~ ├── Protocols // 这是要创建的Protocols目录 │   └── MyTextProtocol.php // 这是要创建的自定义协议文件 ├── test.php // 这是要创建的test脚本 └── Workerman // Workerman源码目录,里面代码不要动 ~~~ 1、创建Protocols目录,并创建一个协议文件 Protocols/MyTextProtocol.php(参照上面目录结构) ~~~php // 用户自定义协议命名空间统一为Protocols namespace Protocols; //简单文本协议,协议格式为 文本+换行 class MyTextProtocol { // 分包功能,返回当前包的长度 public static function input($recv_buffer) { // 查找换行符 $pos = strpos($recv_buffer, "\n"); // 没找到换行符,表示不是一个完整的包,返回0继续等待数据 if($pos === false) { return 0; } // 查找到换行符,返回当前包的长度,包括换行符 return $pos+1; } // 收到一个完整的包后通过decode自动解码,这里只是把换行符trim掉 public static function decode($recv_buffer) { return trim($recv_buffer); } // 给客户端send数据前会自动通过encode编码,然后再发送给客户端,这里加了换行 public static function encode($data) { return $data."\n"; } } ~~~ 2、使用MyTextProtocol协议监听处理请求 参照上面最终目录结构创建test.php文件 ~~~php use Workerman\Worker; use Workerman\Connection\TcpConnection; require_once __DIR__ . '/vendor/autoload.php'; // #### MyTextProtocol worker #### $text_worker = new Worker("MyTextProtocol://0.0.0.0:5678"); /* * 收到一个完整的数据(结尾是换行)后,自动执行MyTextProtocol::decode('收到的数据') * 结果通过$data传递给onMessage回调 */ $text_worker->onMessage = function(TcpConnection $connection, $data) { var_dump($data); /* * 给客户端发送数据,会自动调用MyTextProtocol::encode('hello world')进行协议编码, * 然后再发送到客户端 */ $connection->send("hello world"); }; // run all workers Worker::runAll(); ~~~ 3、测试 打开终端,进入到test.php所在目录,执行`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 ~~~