国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

websocket+tcp

test123456

電腦端頁面去控制設(shè)備
在頁面端我開啟了一個websocket 用workerman建了一個websocket的進程,頁面端有個開啟設(shè)備按鈕,我會把開啟命令發(fā)送給websocket ,但是workerman的websocket收到后,要去連接設(shè)備提供的IP+端口,建立通訊后,收發(fā)數(shù)據(jù)包,意味著是服務(wù)器要主動去連接設(shè)備,在websocket里需要怎么去做呀,請指教,謝謝

3211 1 1
1個回答

walkor 打賞

https://wenda.workerman.net/question/5438 這里有g(shù)atewayWorker做法,硬件tcp與瀏覽器websocket互相通訊,可以參考。

以下是workerman的做法

你的需求里workerman要去連設(shè)備提供的IP+端口,這要求設(shè)備暴露在公網(wǎng)下。如果設(shè)備在一個局域網(wǎng)里,workerman一般是無法主動連上設(shè)備的。但是反過來設(shè)備主動連workerman是沒問題的。所以你要考慮到底是workerman主動連設(shè)備,還是設(shè)備主動連workerman。

如果確實是workerman主動連設(shè)備,可以用AsyncTcpConnection去連。代碼類似:

use Workerman\Connection\AsyncTcpConnection;
use Workerman\Timer;
$worker = new Worker('websocket://0.0.0.0:1234');
$all_connections = [];
$worker->onMessage = function($con, $data) {
    // 假設(shè)已知設(shè)備ip和端口
    $ip = 'xxxx'; $port = xx;
    // 獲取與設(shè)備的連接
    $device_connection = get_connection($ip, $port);
    // 設(shè)備發(fā)來數(shù)據(jù)時
    $device_connection->onMessage = function($device_connection, $data){

    };
    // 給設(shè)備發(fā)數(shù)據(jù)
    $device_connection->send('xxxxx');

};

function get_connection($ip, $port)
{
    static $all_connections = [];
    $addr = $ip.":".$port;
    if (isset($all_connections[addr])) {
        return $all_connections[addr];
    }
    $con_to_device = new AsyncTcpConnection('tcp://'.$addr);
    // 與設(shè)備的連接關(guān)閉時,1秒后重新自動連接
    $con_to_device->onClose = function($con_to_device){
        $con_to_device->reconnect(1);
    };
    $con_to_device->connect();
    $all_connections[addr] = $con_to_device;
    return $con_to_device;
}
年代過于久遠,無法發(fā)表回答
??