• swoole http_server手动整合 thinkphp5.1


    1.在项目目录中创建server文件夹用来存放swoole服务端文件

     2.sever中代码

    <?php
    
    use think\Container;
    
    $http = new Swoole\Http\Server('0.0.0.0', 9501);
    $http->set([
    
        'worker_num'    => 4,
        'log_file'=>'./success.log',  
        'document_root'=>"/Users/wangyalun/Desktop/phptm/tpsw/public/static/live",
        'enable_static_handler' => true,
    ]);
    //注入要启动时引入入口文件
    $http->on('WorkerStart', function(swoole_server $server,  $worker_id) {
        define('APP_PATH', __DIR__ . '/../application/');
       require __DIR__ . '/../thinkphp/base.php';  //引入文件
    });
    $http->on('Request', function ($request, $response) {
      //将icon请求直接返回
    if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') { $response->end(); return; }
      //为了避免请求被缓存 赋值为空数组
    $_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; } } //开启ob缓存 ob_start(); try { think\Container::get('app',[defined('APP_PATH') ? APP_PATH : ''])->run()->send(); }catch (\Exception $e){ echo $e->getMessage(); file_put_contents("error.log",json_encode([$e->getMessage()])); }
      //读取ob缓存区内容
    $res=ob_get_contents(); ob_clean(); $response->end($res); }); $http->start();

    3.解决路由不更新问题

      查看thinkphp下App.php  run()方法

      

     

     $this->request->path();这段代码指向的是thinkphp/library/think/Request.php文件中的path()方法:

    注释掉判断为空的方法

     以及pathinfo方法中的is_null($this->pathinfo)

     注意⚠️这样修改后仍是index,  因为使用swoole的http_server进行访问的时候默认是cli模式

     将 $pathinfo = isset( ['argv'][1]) ? $_SERVER['argv'][1] : ''; 替换成$pathinfo= isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : $_SERVER['REQUEST_URI'];

  • 相关阅读:
    (转)乐观的并发策略——基于CAS的自旋
    mysql避免插入重复数据
    Java_Web使用简单的批处理操作
    Java中jar命令详解
    使用文档注释(javadoc)
    APP和WEB元素定位方法
    RF(二)RF常用库介绍
    RF(一)RF的安装步骤
    javascript匿名函数及闭包深入理解及应用
    javascript简介
  • 原文地址:https://www.cnblogs.com/phpwyl/p/16407169.html
Copyright © 2020-2023  润新知