摘要:最近在试用fastadmin这一个框架,是由tp5进行二开后的一款框架。fastadmin里面有个代码,要获取pathinfo否则会重定向到登录页,而默认的nginx配置获取的pathinfo一直为空,就导致无法正常进入后台。 通过查找资料后,发现pathinfo是php的产物,与nginx无关。如
阅读全文
摘要:本节专门介绍swoole提供的协程机制中核心的API 类方法: 1) set():协程设置,设置协程相关选项。 Swoole\Coroutine::set(array $options); 2) getOptions():获取设置的协程相关选项。 Swoole\Coroutine::getOptio
阅读全文
摘要:这一章开始,我们要开始全方位讨论Swoole为我们提供的协程机制。在swoole中所有的协程必须在协程容器里面创建(Swoole\Coroutine\Scheduler),Swoole 程序启动的时候大部分情况会自动创建协程容器,用 Swoole 启动程序的方式一共有三种: - 调用异步风格服务端程
阅读全文
摘要:多进程在Swoole中是一个很重要的话题,即是协程机制也是依赖于进程。所以Swoole\Lock让大家在PHP 代码中可以很方便地创建一个锁,用来实现数据同步。Lock 类支持以下 5 种锁的类型: 示例: $lock = new Swoole\Lock(SWOOLE_MUTEX); echo "[
阅读全文
摘要:Atomic 是 Swoole 底层提供的原子计数操作类,可以方便整数的无锁原子增减。原子计数器有如下特点: - 使用共享内存,可以在不同的进程之间操作计数 - 基于 gcc/clang 提供的 CPU 原子指令,无需加锁 - 在服务器程序中必须在 Server->start 前创建才能在 Work
阅读全文
摘要:Swoole提供的进程管理器Process\Manage,基于 Process\Pool 实现。可以管理多个进程。相比与 Process\Pool,可以非常方便的创建多个执行不同任务的进程,并且可以控制每一个进程是否要处于协程环境。 注意:Swoole\Process\Manager只有在4.5.3
阅读全文
摘要:Swoole提供的进程池为Process\Pool,基于 Swoole\Server 的 Manager 管理进程模块实现。可管理多个工作进程。该模块的核心功能为进程管理,相比 Process 实现多进程,Process\Pool 更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能,
阅读全文
摘要:Swoole中的Process模块比原生php提供的pcntl模块,提供了更易用的多进程编程接口。 简单总结,Process模块有如下特点: · 可以方便的实现进程间通讯· 支持重定向标准输入和输出,在子进程内 echo 不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据· 提供了 ex
阅读全文
摘要:Swoole提供了毫秒精度的定时器,所有操作都是内存操作,无额外的IO开销。 下面让我们一起详细了解每个函数的作用: 1) 函数tick:设置一个间隔时钟定时器,这个定时器会持续触发 Swoole\Timer::tick(int $msec, callable $callback_function,
阅读全文
摘要:本篇让我们先用一段示例代码开路: <?php Co\run(function () { $server = new Co\Http\Server('0.0.0.0', 9501, false); $server->handle('/', function ($request, $ws) { $ws-
阅读全文
摘要:要利用WebSocket进行文件传输,我们需要讨论两种情况,分别是:发送方可以是客户端,和 发送方是服务端。 1、发送方是客户端 1)服务端接收 $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { s
阅读全文
摘要:由于 WebSocket 是长连接,如果一定时间内没有通讯,连接可能会断开。这时候需要心跳机制,WebSocket 协议包含了 Ping 和 Pong 两个帧,可以定时发送 Ping 帧来保持长连接。 1、心跳原理图: 2、websocket协议控制帧描述 Control frames are id
阅读全文
摘要:这一节,我们重点了解websocket server的成员函数以及相关的配置选项。 1、成员函数 push:向 WebSocket 客户端连接推送数据,长度最大不得超过 2M。 Swoole\WebSocket\Server->push(int $fd, string $data, int $opc
阅读全文
摘要:WIKI: 问:websocket协议虽然和http协议不同,但是兼容于http协议,如何判断客户端连接使用的是http协议? 答:通过使用 $server->connection_info($fd) 获取连接信息,返回的数组中有一项为 websocket_status,根据此状态可以判断是否为 W
阅读全文
摘要:WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。换句话说,Websocket让web可以与服务端实现长连接。 在Swoole中,通过内置的 WebSocket 服务器支持,通过几行 PHP 代码就可以写出一个异步 IO 的多进程的 WebSocket 服
阅读全文
摘要:在这之间,我们讨论了异步风格HTTP服务器,它继承自异步风格的TCP服务器,有着异步风格的所有优点,同时如果碰到了大量的IO等待也会存在阻塞的缺点。 而协程风格的HTTP则很好处理了IO等待的问题。这里要注意完全协程化的 HTTP 服务器实现,Co\Http\Server 由于 HTTP 解析性能原
阅读全文
摘要:开篇之前,先复习一下如何为一个server进行配置的设置: $server->set(array( 'key' => 'value' )); 配置说明: upload_tmp_dir:设置上传文件的临时目录。目录最大长度不得超过 220 字节 示例: $server->set(array( 'upl
阅读全文
摘要:继上一节了解完请求对象之后,这一节我们着重了解响应对象(Response)。响应对象主要用于将数据发现到客户端。当 Response 对象销毁时,如果未调用 end 发送 HTTP 响应,底层会自动执行 end("")。 关于Response需要注意的是:千万不要使用 & 符号引用 Http\Res
阅读全文
摘要:http服务器的本质是应答式的服务器。我们只需关注onRequest事件中的request(请求)和response(响应)对象。让我们一起回顾一下onRequest事件: $http->on("request", function ($request, $response) { $response
阅读全文
摘要:讨论完了TCP服务器,接下来的话题就是HTTP服务器。HTTP这个协议“一般”是搭载在TCP协议上实现的。 注意,这里用“一般”是以前多数是这样做的,在“HTTP协议白皮书”中没有规定HTTP协议底层要搭载在哪种协议上,而且在HTTP3(由谷歌QUIC进化而成)所在的传输层就是搭载在UDP协议上。所
阅读全文