最新版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?
文档有写,Fiber里用阻塞函数进程会进入阻塞。
这个我明白,但不用阻塞函数也有问题,比如我直接:
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
echo "onMessage:id:{$connection->id}\n";
$connection->send('hello');
};
这样也一直不返回数据。。
如果不使用swow,需要把swow关闭,不然会影响。
谢谢老大,解决了。睡太晚注意身体啊