我在tp6.0上安装了Workerman,在GatewayWorker原生框架开启服务,但是在tp上通过websocket协议去连接这个GatewayWorker开启的进程连接不到

lai

tp上的代码:

    public function index()
    {
        $task_connection = new AsyncTcpConnection('websocket://127.0.0.1:9502');
       // 发送数据
        $task_connection->onConnect = function($task_connection)
        {
            echo "connect success\n";
            $task_connection->send(json_encode(['11111']));
        };

//       // 异步获得结果
//       $task_connection->onMessage = function($task_connection, $task_result)
//       {
//           // 结果
//           var_dump($task_result);
//           // 获得结果后记得关闭异步连接
//           $task_connection->close();
//       };
       // 执行异步连接
       $task_connection->connect();
    }

GatewayWorker上开启服务的代码:

class Task
{

    //设置Worker子进程启动时的回调函数,每个子进程启动时都会执行。
    public function onWorkerStart($worker)
    {

    }

    //当客户端与Workerman建立连接时(TCP三次握手完成后)触发的回调函数。
    public function onConnect($connection)
    {
        var_dump(1111);
    }

    //当客户端通过连接发来数据时(Workerman收到数据时)触发的回调函数
    public function onMessage($connection, $data)
    {
        //处理异步任务
//        $task_data = json_decode($data, true);
        var_dump('task321');
//        $connection->send('321789');
    }

    //当客户端连接与Workerman断开时触发的回调函数。
    public function onClose($connection)
    {

    }

    //当客户端的连接上发生错误时触发。
    public function onError($connection)
    {

    }
}

// 自动加载类
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__.'/Task.php';

use \Workerman\Worker;
use \Workerman\WebServer;

// task worker,使用Text协议
$task_worker = new Worker('websocket://0.0.0.0:9502');
// task进程数可以根据需要多开一些
$task_worker->count = 50;
$task_worker->name = 'Task';

// 创建一个对象
$task = new \app\Task();

// 调用类的方法
$task_worker->onWorkerStart= array($task, 'onWorkerStart');
$task_worker->onConnect    = array($task, 'onConnect');
$task_worker->onMessage    = array($task, 'onMessage');
$task_worker->onClose      = array($task, 'onClose');
$task_worker->onError      = array($task, 'onError');

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

进程是可以正常开启的,但是在tp上就是连接不到

2965 1 0
1个回答

walkor 打赏

AsyncTcpConnection 只能在workerman的运行环境运行。你的tp应该是在php-fpm下运行的。
你可以在tp下使用这个库试下 https://github.com/Textalk/websocket-php

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