$worker = new Worker('websocket://0.0.0.0:8998');
$all_connections = [];
$worker->onMessage = function($con, $data) {
// 假设已知设备ip和端口
$ip = '121.40.*.*'; $port = 8990;
// 获取与设备的连接
$device_connection = get_connection($ip, $port);
$device_connection->onError = function($connection, $code, $msg)
{
echo "error $code $msg\n";
};
$device_connection->onConnect=function ($con){
dump("tcp连接成功");
};
// 设备发来数据时
$device_connection->onMessage = function($device_connection, $data){
dump($data);
};
// 给设备发数据
$device_connection->send('');
};
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;
}
// 运行worker
Worker::runAll();
1.网页端的websocket发送的消息指令通过AsyncTcpConnection类转发给tcp,2.tcp收到指令后返回消息通过websocket显示在网页端;
大佬帮忙看下是哪里出现问题了,连接不上tcp
在 websocket 那台服务器上运行
telnet 121.40.x.x 8990
看下是否能连上。顺便贴下 端口是8990 那台服务器的代码
访问的tcp是第三方提供的,绑定了121.40.x.x的8990端口
访问的tcp是第三方提供的,绑定了121.40.x.x的8990端口,单独监听8990端口是可以接受到返回数据的
你这个地址可能是错的,或者对方没启动服务,你看telnet结果是连接被拒绝了。不是workerman的问题
这个是我重新写的一个测试worker,只监听一个tcp协议的8990端口,可以正常的发送数据和返回数据,同时也能telnet到8990端口
所以这个不是workerman的问题,你应该找提供服务的人
现在telent 8990端口提示:telnet: connect to address 121.40.77.177: Connection refused,服务商那边反馈没有开启8990的tcp监听
这个是我重新写的一个测试worker,只监听一个tcp协议的8990端口,可以正常的发送数据和返回数据,同时也能telnet到8990端口