代码举例:
2 个文件,server.php 如下
<?php
require_once __DIR__ . '/init.php';
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Protocols\Http\Session\FileSessionHandler;
use Workerman\Connection\TcpConnection as ConTcpConnection;
use Workerman\Protocols\Http\Request as HttpRequest;
use Workerman\Protocols\Http\Response as HttpResponse;
// 设置 Workerman 日志文件路径
Worker::$logFile = DIR_LOG . '/workerman.log';
// 设置session文件存储位置
FileSessionHandler::sessionSavePath(DIR_SESSION);
$w = new Worker("http://0.0.0.0:2345");
$w->count = 4;
// 初始化全局对象(常驻内存)
$w->onWorkerStart = function($worker)
{
//require_once __DIR__ . '/kii.php';
//$worker->myObject = new MyClass();
/**
* 初始化容器,并设置到子进程
*/
$container = new Container();
$container->set('view', new Tmep());
$worker->box = $container;
};
$w->onMessage = function(ConTcpConnection $tcp_connection, HttpRequest $http_request) use ($w)
{
// 初始化响应对象
$http_response = new HttpResponse();
try
{
// 解析路径部分
$path = parse_url($http_request->uri(), PHP_URL_PATH);
// 构建文件路径
$baseDir = __DIR__.'/www';
$filePath = $baseDir . $path . '.php';
// 检查文件是否存在
if (file_exists($filePath))
{
$context['ggx'] = $w->box; //对象
$context['ggx']['request'] = $http_request;
$context['ggx']['response'] = $http_response;
// 使用匿名函数,将容器注入到页面作用域
$get_render = function () use ($filePath,$context) {
extract($context, EXTR_SKIP);
include $filePath;
};
// 加载并执行文件
ob_start();
$get_render();
$responseContent = ob_get_clean();
$http_response->withBody($responseContent);
} else {
// 文件不存在,返回404错误
$http_response->withStatus(404);
$http_response->withBody('403 Not Found');
}
// 向浏览器发送响应
$tcp_connection->send($http_response);
}catch (CoreException $fpmEx){
//....
$tcp_connection->send($http_response);
}
};
// 运行worker
Worker::runAll();
2,假设目前是 业务时login, 对应请求域名是 www.aa.com/login
login.php 如下:
<?php
try
{
//实例
if (isset($ggx))
{
/**
* @var object $view
* @var Workerman\Protocols\Http\Request $request
*/
$view = $ggx->view;
$request = $ggx->request;
$session = $request->session();
$response = $ggx->response;
//业务相关
$cookie_language = $request->cookie('language') ?? 'zh-cn';
$userId = $session->get('user_id');
$session->set('user_key', 1001);
$session->save();
}
}catch (CoreException $ex){
echo '.....';
}
/**
* ***************************
*/
// 定义要传递给模板的数据
$data = [
'errors' => ['Invalid username or password'.$ss],
'time' => date('Y-m-d H:i:s'),
];
// 渲染模板
$responseContent = $view->render($data, '/www/login');
echo $responseContent;
3, 我希望session 在 login.php 里面 统一处理 如何处理比较好
以上就属于 正常处理 没有问题
为什么不直接用webman?
代码量太大哈哈