我现在是在onWorkerStart中使用了AsyncTcpConnection监听了一个服务端。 如下图所示
现在我想着在另一个方法中使用send发送数据,应该怎么操作呢?
如果你的AsyncTcpConnection是在webman自带的http服务里初始化的,像你那样用global 关键字声明和使用就可以了。 如果AsyncTcpConnection是自定义进程里初始化的,和webman自带的http服务不是同一个进程,则需要做一个跨进程调用, 比如自定义进程里再用http监听一个端口来接受调用,代码类似
public static function onWorkerStart() { $connection = new AsyncTcpConnection(); $connection->onMessage = function (){}; $connection->connect(); $server = new Worker('http://127.0.0.1:1234'); $server->onMessage = function (TcpConnection $httpConnection, \Workerman\Protocols\Http\Request $request) use ($connection) { $post = $request->post(); // 给http客户端发送响应 $httpConnection->send('ok'); // 给TCP发送数据 $connection->send(json_encode($post)); }; $server->listen(); }
控制器里要调用自定义进程的方法时,用curl post数据给自定义进程去调用即可
感谢大佬回复,我现在是用gateway-worker启动了一个TCP服务端,用来接收DTS设备的数据,然后图中的那个AsyncTcpConnection是监听的内网中的一个交换机的串口服务器。流程是检测到DTS主机发送过来的温度数据,然后根据温度值,再下发给交换机的那个串口服务器。
如果你的AsyncTcpConnection是在webman自带的http服务里初始化的,像你那样用global 关键字声明和使用就可以了。
如果AsyncTcpConnection是自定义进程里初始化的,和webman自带的http服务不是同一个进程,则需要做一个跨进程调用,
比如自定义进程里再用http监听一个端口来接受调用,代码类似
控制器里要调用自定义进程的方法时,用curl post数据给自定义进程去调用即可
感谢大佬回复,我现在是用gateway-worker启动了一个TCP服务端,用来接收DTS设备的数据,然后图中的那个AsyncTcpConnection是监听的内网中的一个交换机的串口服务器。流程是检测到DTS主机发送过来的温度数据,然后根据温度值,再下发给交换机的那个串口服务器。