我的实现方案是
1,启动一个ws 服务器 websocketServer,启动一个tcp 服务器tcpServer
2, ws 客户端发送消息给websocketServer,websocketServer 收到消息后,使用 AsyncTcpConnection 将消息发送给 tcpServer,tcpServer 将消息发送给tcp 客户端
tcp 发送消息给websocket 也是一样的操作
$worker = new Worker('websocket://0.0.0.0:2345');
$worker->onWorkerStart = function ($worker) {
//子进程启动后,建立tcp客户端,
$tcpConnection = new AsyncTcpConnection('tcp://127.0.0.1:2347');
$tcpConnection->connect();
$worker->tcpConnection = $tcpConnection;
};
$worker->onMessage = function (TcpConnection $connection, $data) use ($worker) {
//不回复来自tcp的消息
if ($connection->getRemoteIp() != '127.0.0.1') {
$worker->tcpConnection->send($data);
}
foreach ($worker->connections as $websocket_con) {
//发给ws 客户端和tcp 客户端
$websocket_con->send($data);
}
};
$tcpWorker = new Worker("tcp://0.0.0.0:2347");
$tcpWorker->onWorkerStart = function ($worker) {
//子进程启动后,建立ws客户端,
$wsConnection = new AsyncTcpConnection('ws://127.0.0.1:2345');
$wsConnection->connect();
$worker->wsConnection = $wsConnection;
};
$tcpWorker->onMessage = function ($connection, $data) use ($tcpWorker) {
if ($connection->getRemoteIp() != '127.0.0.1') {
$tcpWorker->wsConnection->send($data);
}
foreach ($tcpWorker->connections as $websocket_con) {
//发给ws 客户端和tcp 客户端
$websocket_con->send($data);
}
};
wsServer onMessage 打印tcp 发送的消息,发现乱码
使用wscat 测试,出现报错信息
请问这个问题应该怎么解决
发中文断开的话应该是你tcp客户端发送的不是utf8编码的文字
解决了,是这个tcp 客户端的问题,谢谢了,我在onMessage 里面打印传过来的字符串的编码,显示utf8,但是字符串乱码,我换了个tcp 客户端工具就好了