使用 workerman 创建一个处理 http 客户端消息时,报错:Cannot use object of type Workerman\Protocols\Http\Request as array

以下为使用的 demo:

use Workerman\Worker;

require_once __DIR__ . '/vendor/autoload.php';

$http_workder = new Worker("http://0.0.0.0:8351");

$http_workder->count = 4;

$http_workder->onMessage = function ($connection, $data) {
    print_r($data);
    $id = $data['get']['id'];
    $connection->send("Hello, world!");
};

Worker::runAll();

报错位置在 $id = $data['get']['id'];,大概表示的是获取 get 类型的请求参数 id 值。

参考 workman 官方文档 请求 - Http 服务,原来是新版本 4.x 获取请求参数的方式变了。

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

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function($connection, $request)
{
    // $request为请求对象
    $id = $request->get('id');
    echo $id;
    $connection->send("hello");
};

// 运行worker
Worker::runAll();

因为新版本 4.x 与 3.x 使用方法并不匹配,所以如果使用的是新版本 4.x,以数组形式获取参数的方式就得废弃了。