Windows下Workerman使用Fiber协程,HTTP访问无响应

深林孤鹰

最新版Workerman5.1,安装了revolt/event-loop,运行环境为windows10、PHP8.3.8,用下面代码(文档示例代码):


。。。
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Fiber::class; // 使用自带的Fiber协程

$worker->onMessage = function (TcpConnection $connection, Request $request) 
{
    echo "onMessage:id:{$connection->id}\n";

    Coroutine::create(function () {
        echo file_get_contents("http://。。。");
    });
    $connection->send('ok');
};

Worker::runAll();

运行成功,但实际访问时一直请求中无法返回数据,如果改为Swow就正常,请问是否Windows下不支持Fiber?

135 1 0
1个回答

文档有写,Fiber里用阻塞函数进程会进入阻塞。

  • 深林孤鹰 6天前

    这个我明白,但不用阻塞函数也有问题,比如我直接:
    $worker->onMessage = function(TcpConnection $connection, Request $request)
    {
    echo "onMessage:id:{$connection->id}\n";
    $connection->send('hello');
    };
    这样也一直不返回数据。。

  • walkor 6天前

    如果不使用swow,需要把swow关闭,不然会影响。

  • 深林孤鹰 5天前

    谢谢老大,解决了。睡太晚注意身体啊

×
🔝