资料参考:
https://blog.csdn.net/feiwutudou/article/details/80180179
https://blog.csdn.net/weixin_41033294/article/details/80767808
项目目录结构
1、thinkphp\server\http.php
<?php
/**
* Created by PhpStorm.
* User: baidu
* Date: 18/3/27
* Time: 上午12:50
*/
class Http {
CONST HOST = "0.0.0.0";
CONST PORT = 8811;
public $http = null;
public function __construct() {
$this->http = new swoole_http_server(self::HOST, self::PORT);
$this->http->set(
[
'enable_static_handler' => true,
'document_root' => "/home/work/hdtocs/swoole_mooc/thinkphp/public/static",
'worker_num' => 4,
'task_worker_num' => 4,
]
);
$this->http->on("WorkerStart", [$this, 'onWorkerStart']);
$this->http->on("receive", [$this, 'onReceive']);
$this->http->on("request", [$this, 'onRequest']);
$this->http->on("task", [$this, 'onTask']);
$this->http->on("finish", [$this, 'onFinish']);
$this->http->on("close", [$this, 'onClose']);
$this->http->start();
}
/**
* @param $server
* @param $worker_id
*/
public function onWorkerStart($server, $worker_id) {
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架里面的文件
require __DIR__ . '/../thinkphp/base.php';
}
public function onReceive($serv, $fd, $from_id, $data){
$serv->close($fd);
}
/**
* request回调
* @param $request
* @param $response
*/
public function onRequest($request, $response) {
$_SERVER = [];
if(isset($request->server)) {
foreach($request->server as $k => $v) {
$_SERVER[strtoupper($k)] = $v;
}
}
if(isset($request->header)) {
foreach($request->header as $k => $v) {
$_SERVER[strtoupper($k)] = $v;
}
}
$_GET = [];
if(isset($request->get)) {
foreach($request->get as $k => $v) {
$_GET[$k] = $v;
}
}
$_POST = [];
if(isset($request->post)) {
foreach($request->post as $k => $v) {
$_POST[$k] = $v;
}
}
$_POST['http_server'] = $this->http;
ob_start();
// 执行应用并响应
try {
think\Container::get('app', [APP_PATH])
->run()
->send();
}catch (\Exception $e) {
// todo
}
$res = ob_get_contents();
ob_end_clean();
$response->end($res);
# $this->http->close();
}
/**
* @param $serv
* @param $taskId
* @param $workerId
* @param $data
* @return string
*/
public function onTask($serv, $taskId, $workerId, $data) {
print_r($data);
// 耗时场景 10s
sleep(10);
return "on task finish"; // 告诉worker
}
/**
* @param $serv
* @param $taskId
* @param $data
*/
public function onFinish($serv, $taskId, $data) {
echo "taskId:{$taskId}\n";
echo "finish-data-sucess:{$data}\n";
}
/**
* close
* @param $server
* @param $fd
*/
public function onClose($server, $fd) {
# $server->close($fd, true);
echo "clientid:{$fd}\n";
}
}
new Http();
2、thinkphp\thinkphp\library\think\Request.php
做以下修改
![](https://i-blog.csdnimg.cn/blog_migrate/21a8d50ccf4f5a29877f2b66e60d6d72.png)