我現(xiàn)在是在onWorkerStart中使用了AsyncTcpConnection監(jiān)聽(tīng)了一個(gè)服務(wù)端。
如下圖所示
現(xiàn)在我想著在另一個(gè)方法中使用send發(fā)送數(shù)據(jù),應(yīng)該怎么操作呢?
如果你的AsyncTcpConnection是在webman自帶的http服務(wù)里初始化的,像你那樣用global 關(guān)鍵字聲明和使用就可以了。
如果AsyncTcpConnection是自定義進(jìn)程里初始化的,和webman自帶的http服務(wù)不是同一個(gè)進(jìn)程,則需要做一個(gè)跨進(jìn)程調(diào)用,
比如自定義進(jìn)程里再用http監(jiān)聽(tīng)一個(gè)端口來(lái)接受調(diào)用,代碼類似
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客戶端發(fā)送響應(yīng)
$httpConnection->send('ok');
// 給TCP發(fā)送數(shù)據(jù)
$connection->send(json_encode($post));
};
$server->listen();
}
控制器里要調(diào)用自定義進(jìn)程的方法時(shí),用curl post數(shù)據(jù)給自定義進(jìn)程去調(diào)用即可
感謝大佬回復(fù),我現(xiàn)在是用gateway-worker啟動(dòng)了一個(gè)TCP服務(wù)端,用來(lái)接收DTS設(shè)備的數(shù)據(jù),然后圖中的那個(gè)AsyncTcpConnection是監(jiān)聽(tīng)的內(nèi)網(wǎng)中的一個(gè)交換機(jī)的串口服務(wù)器。流程是檢測(cè)到DTS主機(jī)發(fā)送過(guò)來(lái)的溫度數(shù)據(jù),然后根據(jù)溫度值,再下發(fā)給交換機(jī)的那個(gè)串口服務(wù)器。