PHP 从原始 tcp 套接字读取数据并使用 2 React 连接器通过 WebSocket 客户端发送它们
PHP read data from raw tcp socket and send them through WebSocket Client using 2 React Connector
这是我正在尝试做的事情:
(Socket Server:9006) <- (Websocket 客户端) -> (:8080 Websocket 服务器)
我想从Socket Server读取数据,
编辑一些东西然后发送到 Websocket 服务器。
我必须能够同时读取来自 Websocker Server 的数据
我设法使用 1 个用于套接字服务器的 React 连接器和 1 个用于 WebSocket 服务器的棘轮连接器连接到两个服务器:
$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);
$connector->connect('192.168.0.1:9006')->then(function (React\Socket\ConnectionInterface $connection) use ($loop) {
$connection->pipe(new React\Stream\WritableResourceStream(STDOUT, $loop));
$connection->write("Hello World!\n");
$connection->on('data', function ($chunk) {
echo $chunk;
// How to send $chunk to the Websocket server through second connector, see below?
});
});
$reactConnector = new \React\Socket\Connector($loop, [
'dns' => '8.8.8.8',
'timeout' => 10
]);
$connector = new \Ratchet\Client\Connector($loop, $reactConnector);
$connector('ws://1.2.3.4:8080')
->then(function(Ratchet\Client\WebSocket $conn) {
$conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
echo "Received: {$msg}\n";
// $conn->close();
});
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})\n";
});
$conn->send('Hello World!');
}, function(\Exception $e) use ($loop) {
echo "Could not connect: {$e->getMessage()}\n";
$loop->stop();
});
$loop->run();
所以我的问题是:如何使用在第一个连接器和第二个连接器中接收到的数据?
感谢您的帮助!
我找到了解决方案,
如果它可以帮助任何人,我会粘贴到那里...:[=11=]
require __DIR__ . '/vendor/autoload.php';
use React\Socket\Connector;
use React\Socket\ConnectionInterface;
$loop = React\EventLoop\Factory::create();
$reactConnector = new \React\Socket\Connector($loop, [
'dns' => '8.8.8.8',
'timeout' => 10
]);
$wsConnector = new \Ratchet\Client\Connector($loop, $reactConnector);
$wsConnector('ws://1.2.3.4:8080')
->then(function(Ratchet\Client\WebSocket $wsConn) use ($loop) {
$socketConnector = new React\Socket\Connector($loop);
$socketConnector->connect('192.168.0.1:9006')->then(function (ConnectionInterface $socketConn) use ($wsConn) {
$socketConn->on('data', function ($msg) use ($wsConn){
printf("Msg received from Socket Server : %s\n", $msg);
// Send it to wsServer
$wsConn->send($msg);
});
});
$wsConn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($wsConn) {
printf("Msg received from WebSocket Server : %s\n", $msg);
});
$wsConn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})\n";
});
}, function(\Exception $e) use ($loop) {
echo "Could not connect: {$e->getMessage()}\n";
$loop->stop();
});
$loop->run();
这是我正在尝试做的事情:
(Socket Server:9006) <- (Websocket 客户端) -> (:8080 Websocket 服务器)
我想从Socket Server读取数据, 编辑一些东西然后发送到 Websocket 服务器。 我必须能够同时读取来自 Websocker Server 的数据
我设法使用 1 个用于套接字服务器的 React 连接器和 1 个用于 WebSocket 服务器的棘轮连接器连接到两个服务器:
$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);
$connector->connect('192.168.0.1:9006')->then(function (React\Socket\ConnectionInterface $connection) use ($loop) {
$connection->pipe(new React\Stream\WritableResourceStream(STDOUT, $loop));
$connection->write("Hello World!\n");
$connection->on('data', function ($chunk) {
echo $chunk;
// How to send $chunk to the Websocket server through second connector, see below?
});
});
$reactConnector = new \React\Socket\Connector($loop, [
'dns' => '8.8.8.8',
'timeout' => 10
]);
$connector = new \Ratchet\Client\Connector($loop, $reactConnector);
$connector('ws://1.2.3.4:8080')
->then(function(Ratchet\Client\WebSocket $conn) {
$conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
echo "Received: {$msg}\n";
// $conn->close();
});
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})\n";
});
$conn->send('Hello World!');
}, function(\Exception $e) use ($loop) {
echo "Could not connect: {$e->getMessage()}\n";
$loop->stop();
});
$loop->run();
所以我的问题是:如何使用在第一个连接器和第二个连接器中接收到的数据?
感谢您的帮助!
我找到了解决方案, 如果它可以帮助任何人,我会粘贴到那里...:[=11=]
require __DIR__ . '/vendor/autoload.php';
use React\Socket\Connector;
use React\Socket\ConnectionInterface;
$loop = React\EventLoop\Factory::create();
$reactConnector = new \React\Socket\Connector($loop, [
'dns' => '8.8.8.8',
'timeout' => 10
]);
$wsConnector = new \Ratchet\Client\Connector($loop, $reactConnector);
$wsConnector('ws://1.2.3.4:8080')
->then(function(Ratchet\Client\WebSocket $wsConn) use ($loop) {
$socketConnector = new React\Socket\Connector($loop);
$socketConnector->connect('192.168.0.1:9006')->then(function (ConnectionInterface $socketConn) use ($wsConn) {
$socketConn->on('data', function ($msg) use ($wsConn){
printf("Msg received from Socket Server : %s\n", $msg);
// Send it to wsServer
$wsConn->send($msg);
});
});
$wsConn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($wsConn) {
printf("Msg received from WebSocket Server : %s\n", $msg);
});
$wsConn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})\n";
});
}, function(\Exception $e) use ($loop) {
echo "Could not connect: {$e->getMessage()}\n";
$loop->stop();
});
$loop->run();