我官方例子中加入onClose回调属性,当触发了onClose,就会在终端中输出connection closed,但我运行后,通过浏览器访问,浏览器已经请求结束了,但终端还没输出connection closed,直到我按ctrl+z关闭运行,才显示connection closed,为何会这样呢
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://0.0.0.0:6636");
// 启动4个进程对外提供服务
$http_worker->count = 4;
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// 向浏览器发送hello world
$connection->send('hello world');
};
$http_worker->onClose = function(TcpConnection $connection)use($http_worker,&$all_golbal_count)
{
echo "connection closed\n";
};
// 运行worker
Worker::runAll();
我在$connection->send('hello world');后面加上$connection->close();后再运行,就可以实现了connection closed输出,难道我不在最后加上$connection->close(),那么他就一直长期连接?
你可以看看Connection: Keep-Alive,因为底层tcp连接并没close
把http头设置为“Connection: Close”也许能解决你的问题