tcp接受数据转发给websocket

beginning

需要做一个tcp接受数据以后 实时转发给前端的web页面
参照web-msg-sender例子来写
为什么socket推送前端2120收不到
代码该怎么改呢?

$sender_io = new SocketIO(2120);
$sender_io->on('connection', function($socket){    
    $socket->on('login', function ($uid)use($socket){
         ...
    });    
    $socket->on('disconnect', function () use($socket) {
        ...
    });
});
$web = new WebServer('http://0.0.0.0:2123');
$web->addRoot('localhost', __DIR__ . '/web');
$tcp_worker = new Worker("tcp://0.0.0.0:2500");
$tcp_worker->count = 10;
$tcp_worker->onMessage = function($connection, $data)
{  
    global $sender_io;
    $sender_io->emit('new_msg', $data); //这里通过sender_io给前端页面推送 但是前端2120收不到
    $connection->send('hello ' . $data);
};
Worker::runAll();
6983 3 0
3个回答

walkor

你的代码里面 WebServer 和 SocketIO是属于不同进程的,互相操作不到的。

  • 暂无评论
beginning
$sender_io->on('workerStart', function(){

    $tcp_worker = new Worker("tcp://0.0.0.0:2500");

    $tcp_worker->onMessage = function($connection, $data)
    {
        global $sender_io;
        $sender_io->emit('new_msg', $data);
        $connection->send('ok ' . $data);
    };
    $tcp_worker->listen();
});

我把代码改成这样的话
就可以监听到tcp端了

但是有个疑问:这样的话 会不会每个websocket链接都会去创建一个tcp进程?
如果前端有100个页面访问,就会建立了100个tcp监听进程?

  • 暂无评论
walkor

不会

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