tcp服務(wù)器A(在自己這邊)
tcp服務(wù)器B(在第三方)
1.設(shè)備和tcp服務(wù)器A()建立長(zhǎng)連接成功,然后需要和tcp服務(wù)器B建立長(zhǎng)連接;
2.設(shè)備發(fā)送給tcp服務(wù)器A的數(shù)據(jù),需轉(zhuǎn)發(fā)給tcp服務(wù)器B
3.tcp服務(wù)器B發(fā)送設(shè)備的數(shù)據(jù),先發(fā)送tcp服務(wù)器A,tcp服務(wù)器A再發(fā)設(shè)備
設(shè)備和tcp服務(wù)器A()建立長(zhǎng)連接和互發(fā)數(shù)據(jù)是成的
困難:怎么和tcp服務(wù)器b建立長(zhǎng)連接,沒有思路
想要實(shí)現(xiàn):設(shè)備上線,tcp服務(wù)器A上線,tcp服務(wù)器B上線
tcp服務(wù)器B發(fā)送數(shù)據(jù)給tcp服務(wù)器A,tcp服務(wù)器A能把數(shù)據(jù)發(fā)送給設(shè)備
設(shè)備發(fā)送數(shù)據(jù)給tcp服務(wù)器A,tcp服務(wù)器A把數(shù)據(jù)發(fā)送給tcp服務(wù)器B
目前是在laravel里用GatewayWorker實(shí)現(xiàn)和設(shè)備的長(zhǎng)連接和互發(fā)數(shù)據(jù)
不局限框架,準(zhǔn)備把這個(gè)服務(wù)單獨(dú)部署.
請(qǐng)各位大佬不吝賜教
你這個(gè)類似代理,如果與B只建立一個(gè)連接參考這個(gè)
http://www.wtbis.cn/doc/workerman/async-tcp-connection/reconnect.html
如果每個(gè)客戶端連接到A后都需要與B建立一個(gè)連接,參考
http://www.wtbis.cn/doc/workerman/async-tcp-connection/construct.html
http://www.wtbis.cn/doc/workerman/tcp-connection/pipe.html
以上用法gatewayWorker里也可以用,也就是在Events.php的onWorkerStart onConnect 里使用 AsyncTcpConnection
我用的是這個(gè)http://www.wtbis.cn/doc/workerman/tcp-connection/pipe.html
其中有個(gè)代碼是$connection->pipe($connection_to_80);
下面是我的代碼
class Events
{
public static function onWorkerStart($businessWorker){
Log::info('啟動(dòng)服務(wù)');
}
public static function onConnect($client_id){
$connection_to_three = new AsyncTcpConnection('tcp://0.0.0.0:3000');
// 設(shè)置將當(dāng)前客戶端連接的數(shù)據(jù)導(dǎo)向第三方的連接
/*
1 public static function onConnect($client_id,TcpConnection $connection) 在這里引入報(bào)錯(cuò),多了參數(shù)
2 $connection = new TcpConnection(); 這樣寫報(bào)錯(cuò):需要參數(shù)
3 $connection = new TcpConnection(connection_to_three); 這樣寫報(bào)錯(cuò):需要的是resource,不是obj
如何在這個(gè)方法里使用 TcpConnection $connection
*/
$connection->pipe($connection_to_three);
// 設(shè)置80端口連接返回的數(shù)據(jù)導(dǎo)向客戶端連接
$connection_to_three->pipe($connection);
// 執(zhí)行異步連接
$connection_to_three->connect();
Log::info('連接成功-' . $client_id);
}
public static function onWebSocketConnect($client_id, $data){
Log::info('onWebSocketConnect' . $client_id);
}
public static function onMessage($client_id, $message){
Log::info('收到消息-' .$message.'-'. $client_id);
Gateway::sendToClient($client_id,$message.'3000');
}
public static function onClose($client_id){
Log::info('斷開連接-' . $client_id);
}
}