自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 现代 PHP

谨以此文向《Morden PHP》致敬;PHP 之道;PHP 框架;PHP 异步编程;ReactPHP

2021-09-22 11:36:33 262

原创 PHP 基于 psr-15 的中间件和请求处理

0. 准备新建 /path/to/your/project 目录,在此目录中创建 composer.json 并写入以下内容:{ "require": { "psr/http-server-handler": "^1.0", "psr/http-server-middleware": "^1.0", "slim/psr7": "^1.4" }, "autoload": { "psr-4": {

2021-06-28 14:38:17 534 2

原创 PHP 实现布隆过滤器

布隆过滤器的原理可以参考这里,非常详细:http://imhuchao.com/1271.html以下程序是为了理解其原理,仅供参考。其中,哈希函数的数量,位数组的大小都有计算公式,可以参考上文链接。本程序为了简单起见,直接写死。class Bloom { // 哈希函数的数量 protected $hashNum = 10; // 位数组的大小 protected $bitArrayCount = 5000; // 位数组 protected $bitArray = []; pu

2020-09-30 18:45:29 1809

原创 使用 Swoole 的 HTTP 服务实现简单的请求调度

本文是我练习代码的整理总结,水平有限,仅供参考。下面是程序的入口,创建了一个 HTTP 协程服务,调用 App 类实现请求调度。namespace server;use app\App;// 我的 php-ini 中关闭了短命名,所以此处定义了两个别名use Swoole\Coroutine as Co;function go($callable) { Co::create($callable);}// 创建协程容器Co\run(function () { //

2020-09-06 20:08:15 781

原创 Swoole 使用 TCP 协议实现简单的 HTTP 服务

HTTP 协议的响应包括响应头和响应体(不是必须的),响应头中的 Content-Length 用来标记响应 Body 的长度,这其实是 HTTP 协议的分包机制。假设实际发送的 Body 长度小于 Content-Length,浏览器会一直处于等待接收数据的状态(小圈一直转)。假设实际发送的 Body 长度大于 Content-Length,多于的部分会被丢弃。Swoole\Coroutine\run(function () { $server = new Swoole\Coroutine\

2020-09-05 23:09:49 490

原创 PHP 实现服务限流控制

本文试图基于计数器实现一个简单服务限流程序,这个计数器的值表示服务器尚可可以接待的请求数量。假设服务器设定的 qps 为 500,那么我们每隔 2 ms(即 1 / qps)检查计数器的值,如果小于设定的最大请求数,就给计数器 + 1,否则什么都不做。当请求进来的时候,如果计数器大于 0,表示可以提供服务,这时计数器 - 1,执行服务。如果计数器等于0,则无法提供服务。代码如下:$http = new Swoole\Http\Server('0.0.0.0', 9501);// 限流控制对象$tr

2020-08-31 02:14:25 696

原创 PHP 使用静态变量实现单例

先给一个常见的单例的例子:class Singleton{ /** * @var Singleton */ static private $instance; private function __construct() { echo 'constructed' . PHP_EOL; } static public function getInstance() { if (!self::$instance

2020-08-28 17:16:38 165

原创 PHP 事件机制练习代码

注意:以下代码纯属练习。想要实现优良的事件机制,请参考 PSR-14 规范。/** * 事件类的接口 * Interface EventInterface */interface EventInterface{ public function listener(): array;}/** * 登出事件 * Class LogoutEvent */class LogoutEvent implements EventInterface{ /** * @var

2020-08-11 12:33:15 81

原创 PHP 中间件实现

本文采用层层递进的方式描述了中间件的实现,众看官且看。一 、函数的传递在很多计算机编程语言中,函数可以作为参数传递到另外一个函数中。PHP 的例子如下$fun = function () { echo 'This is A fun' . PHP_EOL;};function main($fun) { $fun();}main($fun);// 执行结果:// This is A fun二、装饰器函数假设在执行主函数的时候,在主函数前后都需要执行一段代码,这时我们

2020-08-11 12:32:22 1054

原创 PHP 练习题

#PHP 练习题有一个字符串 String s = “ababab”,这个字符串可以看做 3 个 “ab” 构成,即 n = 3,L = “ab”,s = nL。写一段程序,输入:“aaaaa”,输出 6a;输入 ababa,输出:1ababa。// 字符串替换的方式protected function fun1($str) { $length = strlen($str); for ($i = 1; $i <= floor($length / 2); $i++) {

2020-08-11 12:29:39 258

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除