- 博客(10)
- 收藏
- 关注
原创 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 610 2
原创 PHP 实现布隆过滤器
布隆过滤器的原理可以参考这里,非常详细:http://imhuchao.com/1271.html以下程序是为了理解其原理,仅供参考。其中,哈希函数的数量,位数组的大小都有计算公式,可以参考上文链接。本程序为了简单起见,直接写死。class Bloom { // 哈希函数的数量 protected $hashNum = 10; // 位数组的大小 protected $bitArrayCount = 5000; // 位数组 protected $bitArray = []; pu
2020-09-30 18:45:29 1840
原创 使用 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 810
原创 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 498
原创 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 703
原创 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 191
原创 PHP 事件机制练习代码
注意:以下代码纯属练习。想要实现优良的事件机制,请参考 PSR-14 规范。/** * 事件类的接口 * Interface EventInterface */interface EventInterface{ public function listener(): array;}/** * 登出事件 * Class LogoutEvent */class LogoutEvent implements EventInterface{ /** * @var
2020-08-11 12:33:15 91
原创 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 1062
原创 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 265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人