热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

记录·ThinkPHP5中使用swoole

(备注:这只是swoole和TP5结合的始端,想必二者的深入融合会有更多的坑需要踩!)首先去TP官网下载框架总体概览图:在项

(备注:这只是 swoole 和 TP5 结合的始端,想必二者的深入融合会有更多的坑需要踩!)
 
首先去 TP 官网下载框架
 

总体概览图:
 
记录·ThinkPHP5中使用swoole

在项目根目录下新建 server 文件夹,
http_server.php 内容如下(可以直接拷贝过去使用):

/*** Created by PhpStorm.* User: baidu* Date: 18/2/28* Time: 上午1:39*/
$http = new swoole_http_server("0.0.0.0", 8811);$http->set(['enable_static_handler' => true,'document_root' => "/home/work/swoole/thinkphpcore/public",'worker_num' => 5,'content-type' => 'text/html; charset=utf-8',]
);
$http->on('WorkerStart', function (swoole_server $server, $worker_id) {// 定义应用目录define('APP_PATH', __DIR__ . '/../application/');// 1. 加载基础文件require __DIR__ . '/../thinkphpcore/base.php';// 这里不能使用这种方式加载框架内容,不信你可以打开试试// require __DIR__ . '/../thinkphpcore/start.php';
});
$http->on('request', function($request, $response) use ($http) {//print_r($request->get);$content = ['date:' => date("Ymd H:i:s"),'get:' => $request->get,'post:' => $request->post,'header:' => $request->header,];swoole_async_writefile(__DIR__."/access.log", json_encode($content).PHP_EOL, function($filename) {// todo}, FILE_APPEND);$_SERVER = [];if (isset($request->server)) {foreach ($request->server as $k => $v) {$_SERVER[strtoupper($k)] = $v;}}$_HEADER = [];if (isset($request->header)) {foreach ($request->header as $k => $v) {$_HEADER[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;}}// 2. 执行应用ob_start();try {think\App::run()->send();} catch (Exception $e) {echo $e->getMessage();}$res = ob_get_contents();ob_end_clean();$response->end($res);// 这是种简单粗暴的销毁进程、重新加载框架内容的方式// $http->close($request);
});$http->start();

一:开启 URL 普通模式
找到 thinkphp5-thinkphpcore-library-think-Request.php 的 pathinfo() 和 path() 方法
把这两处的 if (is_null) 判断语句注释掉.
因为如果不注释变量 pathinfo 只会存储框架第一次运行保存下来的值.

/*** 获取当前请求URL的pathinfo信息(含URL后缀)* @access public* @return string*/public function pathinfo(){
// if (is_null($this->pathinfo)) {.........
// }return $this->pathinfo;}/*** 获取当前请求URL的pathinfo信息(不含URL后缀)* @access public* @return string*/public function path(){
// if (is_null($this->path)) {.........
// }return $this->path;}

效果访问如下:
记录·ThinkPHP5中使用swoole

二:开启 pathinfo 模式:

/*** 获取当前请求URL的pathinfo信息(含URL后缀)* @access public* @return string*/public function pathinfo(){// 配置 pathinfo if (isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] != '/') {return ltrim($_SERVER['PATH_INFO'], '/');}// 配置 普通访问模式
// if (is_null($this->pathinfo)) {.........
// }return $this->pathinfo;}/*** 获取当前请求URL的pathinfo信息(不含URL后缀)* @access public* @return string*/public function path(){
// if (is_null($this->path)) {.........
// }return $this->path;}

访问效果如下:
记录·ThinkPHP5中使用swoole

记录·ThinkPHP5中使用swoole

Index.php 示例代码:

{public function index(Request $request){return 'hello-swoole';}public function check(){print_r($_GET);return time();}public function getClientIp(){$list = swoole_get_local_ip();print_r($list);}
}

 
Swoole 官方是这样介绍的:HttpServer

  • swoole_http_server对Http协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理
  • swoole-1.7.7增加了内置Http服务器的支持,通过几行代码即可写出一个异步非阻塞多进程的Http服务器。

    $http = new swoole_http_server("127.0.0.1", 9501);
    $http->on('request', function ($request, $response) {
    $response->end("

    Hello Swoole. #".rand(1000, 9999)."

    ");
    });
    $http->start();

通过使用apache bench工具进行压力测试,在Inter Core-I5 4核 + 8G内存的普通PC机器上,swoole_http_server可以达到近11万QPS。远远超过php-fpm,golang自带http服务器,node.js自带http服务器。性能几乎接近与Nginx的静态文件处理。

ab -c 200 -n 200000 -k http://127.0.0.1:9501

转:https://blog.51cto.com/laok8/2314816



推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
麻廿_965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有