怎么在另一个控制器方法中使用AsyncTcpConnection的send方法呢

foggy

问题描述

我现在是在onWorkerStart中使用了AsyncTcpConnection监听了一个服务端。
如下图所示
截图

现在我想着在另一个方法中使用send发送数据,应该怎么操作呢?
截图

278 1 0
1个回答

walkor

如果你的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数据给自定义进程去调用即可

  • foggy 2023-11-06

    感谢大佬回复,我现在是用gateway-worker启动了一个TCP服务端,用来接收DTS设备的数据,然后图中的那个AsyncTcpConnection是监听的内网中的一个交换机的串口服务器。流程是检测到DTS主机发送过来的温度数据,然后根据温度值,再下发给交换机的那个串口服务器。

🔝