电脑端页面去控制设备 在页面端我开启了一个websocket 用workerman建了一个websocket的进程,页面端有个开启设备按钮,我会把开启命令发送给websocket ,但是workerman的websocket收到后,要去连接设备提供的IP+端口,建立通讯后,收发数据包,意味着是服务器要主动去连接设备,在websocket里需要怎么去做呀,请指教,谢谢
https://wenda.workerman.net/question/5438 这里有gatewayWorker做法,硬件tcp与浏览器websocket互相通讯,可以参考。
以下是workerman的做法
你的需求里workerman要去连设备提供的IP+端口,这要求设备暴露在公网下。如果设备在一个局域网里,workerman一般是无法主动连上设备的。但是反过来设备主动连workerman是没问题的。所以你要考虑到底是workerman主动连设备,还是设备主动连workerman。
如果确实是workerman主动连设备,可以用AsyncTcpConnection去连。代码类似:
use Workerman\Connection\AsyncTcpConnection; use Workerman\Timer; $worker = new Worker('websocket://0.0.0.0:1234'); $all_connections = []; $worker->onMessage = function($con, $data) { // 假设已知设备ip和端口 $ip = 'xxxx'; $port = xx; // 获取与设备的连接 $device_connection = get_connection($ip, $port); // 设备发来数据时 $device_connection->onMessage = function($device_connection, $data){ }; // 给设备发数据 $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); // 与设备的连接关闭时,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; }
赞
学习了
https://wenda.workerman.net/question/5438 这里有gatewayWorker做法,硬件tcp与浏览器websocket互相通讯,可以参考。
以下是workerman的做法
你的需求里workerman要去连设备提供的IP+端口,这要求设备暴露在公网下。如果设备在一个局域网里,workerman一般是无法主动连上设备的。但是反过来设备主动连workerman是没问题的。所以你要考虑到底是workerman主动连设备,还是设备主动连workerman。
如果确实是workerman主动连设备,可以用AsyncTcpConnection去连。代码类似:
赞
学习了