如何使用web端向TCP服务器发送消息?

xiaopi

目前有一个需求是建立一个TCP客户端,与远端的TCP服务端交互。 为了方便使用,需要web端发送信息,然后后端将信息发送给TCP服务端,并与之交互,交互结果发送给web端
初步的想法是,
1.建立websocket服务端,与前端进行交互
2.websocket服务端接受到前端发送的数据后,在发送给TCP服务端
3.TCP服务端返回的数据,经过处理,再通过websocket推送给前端
代码如下

use Workerman\Worker; 
require_once __DIR__ . '/Workerman/Autoloader.php'; 

$worker = new Worker ( 'websocket://0.0.0.0:5678' ); 
$worker->onWorkerStart=function($worker){
    //子进程启动后,建立tcp客户端,
    $conn = new AsyncTcpConnection('tcp://127.0.0.1:8050'); 
    $conn->onMessage = function($conn, $data) {     
        //这里与tcp服务器交互
    };
    $conn->connect();
};
$worker->onMessage = function ($connection, $data) {
    //此处接受网站发送过来的websocket
    //如何在此处向子进程的tcp服务器发送消息??
};

Worker::runAll ();

问题来了,在onMessage中,如何使用OnWorkerStart中创建的TCP客户端?

1259 2 2
2个回答

walkor
use Workerman\Worker; 
require_once __DIR__ . '/Workerman/Autoloader.php'; 

$worker = new Worker ( 'websocket://0.0.0.0:5678' ); 
$worker->onWorkerStart=function($worker){
    //子进程启动后,建立tcp客户端,
    $conn = new AsyncTcpConnection('tcp://127.0.0.1:8050'); 
    $conn->onMessage = function($conn, $data) {     
        //这里与tcp服务器交互
    };
    $conn->connect();
    $worker->conn = $conn;
};
$worker->onMessage = function ($connection, $data) use ($worker) {
    $worker->conn->send('xxx');
};

Worker::runAll ();
  • xiaopi 2022-02-17

    十分感谢! 有个小问题哈,我没在文档中发现Worker类有这个属性,这是魔术方法__set()吗

  • walkor 2022-02-17

    目前(php<=8.1)php的对象是可以动态添加任意属性的。

  • xiaopi 2022-02-17

    感谢

zjcyjj

3.TCP服务端返回的数据,经过处理,再通过websocket推送给前端
//子进程启动后,建立tcp客户端,
$conn = new AsyncTcpConnection('tcp://127.0.0.1:8050');
$conn->onMessage = function($conn, $data) {
//这里与tcp服务器交互
再通过websocket推送给前端 这里代码怎么写呢 ?
$worker - > send($data); //是这样吗 嘿嘿嘿
};

  • 暂无评论
年代过于久远,无法发表回答
🔝