2021年1月11日

Swoole从入门到入土(22)——多进程[Process]

摘要: Swoole中的Process模块比原生php提供的pcntl模块,提供了更易用的多进程编程接口。 简单总结,Process模块有如下特点: · 可以方便的实现进程间通讯· 支持重定向标准输入和输出,在子进程内 echo 不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据· 提供了 ex 阅读全文

posted @ 2021-01-11 23:33 咚..咚 阅读(653) 评论(0) 推荐(0) 编辑

2021年1月6日

Swoole从入门到入土(21)——毫秒定时器

摘要: Swoole提供了毫秒精度的定时器,所有操作都是内存操作,无额外的IO开销。 下面让我们一起详细了解每个函数的作用: 1) 函数tick:设置一个间隔时钟定时器,这个定时器会持续触发 Swoole\Timer::tick(int $msec, callable $callback_function, 阅读全文

posted @ 2021-01-06 20:34 咚..咚 阅读(464) 评论(0) 推荐(0) 编辑

2021年1月5日

Swoole从入门到入土(20)——WebSocket服务器[协程版本]

摘要: 本篇让我们先用一段示例代码开路: <?php Co\run(function () { $server = new Co\Http\Server('0.0.0.0', 9501, false); $server->handle('/', function ($request, $ws) { $ws- 阅读全文

posted @ 2021-01-05 10:13 咚..咚 阅读(421) 评论(0) 推荐(0) 编辑

2020年12月29日

Swoole从入门到入土(19)——WebSocket服务器[文件传输]

摘要: 要利用WebSocket进行文件传输,我们需要讨论两种情况,分别是:发送方可以是客户端,和 发送方是服务端。 1、发送方是客户端 1)服务端接收 $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { s 阅读全文

posted @ 2020-12-29 15:42 咚..咚 阅读(725) 评论(0) 推荐(0) 编辑

2020年12月22日

Swoole从入门到入土(18)——WebSocket服务器[心跳ping]

摘要: 由于 WebSocket 是长连接,如果一定时间内没有通讯,连接可能会断开。这时候需要心跳机制,WebSocket 协议包含了 Ping 和 Pong 两个帧,可以定时发送 Ping 帧来保持长连接。 1、心跳原理图: 2、websocket协议控制帧描述 Control frames are id 阅读全文

posted @ 2020-12-22 09:42 咚..咚 阅读(1320) 评论(0) 推荐(0) 编辑

2020年12月15日

Swoole从入门到入土(17)——WebSocket服务器[成员函数与配置选项]

摘要: 这一节,我们重点了解websocket server的成员函数以及相关的配置选项。 1、成员函数 push:向 WebSocket 客户端连接推送数据,长度最大不得超过 2M。 Swoole\WebSocket\Server->push(int $fd, string $data, int $opc 阅读全文

posted @ 2020-12-15 12:02 咚..咚 阅读(575) 评论(0) 推荐(0) 编辑

Swoole从入门到入土(16)——WebSocket服务器[事件]

摘要: WIKI: 问:websocket协议虽然和http协议不同,但是兼容于http协议,如何判断客户端连接使用的是http协议? 答:通过使用 $server->connection_info($fd) 获取连接信息,返回的数组中有一项为 websocket_status,根据此状态可以判断是否为 W 阅读全文

posted @ 2020-12-15 10:38 咚..咚 阅读(549) 评论(0) 推荐(0) 编辑

2020年12月14日

Swoole从入门到入土(15)——WebSocket服务器[初步接触]

摘要: WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。换句话说,Websocket让web可以与服务端实现长连接。 在Swoole中,通过内置的 WebSocket 服务器支持,通过几行 PHP 代码就可以写出一个异步 IO 的多进程的 WebSocket 服 阅读全文

posted @ 2020-12-14 16:01 咚..咚 阅读(301) 评论(0) 推荐(0) 编辑

2020年10月31日

Swoole从入门到入土(14)——HTTP服务器[协程风格]

摘要: 在这之间,我们讨论了异步风格HTTP服务器,它继承自异步风格的TCP服务器,有着异步风格的所有优点,同时如果碰到了大量的IO等待也会存在阻塞的缺点。 而协程风格的HTTP则很好处理了IO等待的问题。这里要注意完全协程化的 HTTP 服务器实现,Co\Http\Server 由于 HTTP 解析性能原 阅读全文

posted @ 2020-10-31 21:34 咚..咚 阅读(434) 评论(0) 推荐(0) 编辑

2020年10月16日

Swoole从入门到入土(13)——HTTP服务器[配置]

摘要: 开篇之前,先复习一下如何为一个server进行配置的设置: $server->set(array( 'key' => 'value' )); 配置说明: upload_tmp_dir:设置上传文件的临时目录。目录最大长度不得超过 220 字节 示例: $server->set(array( 'upl 阅读全文

posted @ 2020-10-16 10:40 咚..咚 阅读(296) 评论(0) 推荐(0) 编辑

Swoole从入门到入土(12)——HTTP服务器[Response]

摘要: 继上一节了解完请求对象之后,这一节我们着重了解响应对象(Response)。响应对象主要用于将数据发现到客户端。当 Response 对象销毁时,如果未调用 end 发送 HTTP 响应,底层会自动执行 end("")。 关于Response需要注意的是:千万不要使用 & 符号引用 Http\Res 阅读全文

posted @ 2020-10-16 09:18 咚..咚 阅读(690) 评论(0) 推荐(0) 编辑

2020年10月14日

Swoole从入门到入土(11)——HTTP服务器[Request]

摘要: http服务器的本质是应答式的服务器。我们只需关注onRequest事件中的request(请求)和response(响应)对象。让我们一起回顾一下onRequest事件: $http->on("request", function ($request, $response) { $response 阅读全文

posted @ 2020-10-14 15:56 咚..咚 阅读(801) 评论(0) 推荐(0) 编辑

2020年10月10日

Swoole从入门到入土(10)——HTTP服务器[初步接触]

摘要: 讨论完了TCP服务器,接下来的话题就是HTTP服务器。HTTP这个协议“一般”是搭载在TCP协议上实现的。 注意,这里用“一般”是以前多数是这样做的,在“HTTP协议白皮书”中没有规定HTTP协议底层要搭载在哪种协议上,而且在HTTP3(由谷歌QUIC进化而成)所在的传输层就是搭载在UDP协议上。所 阅读全文

posted @ 2020-10-10 21:36 咚..咚 阅读(303) 评论(0) 推荐(0) 编辑

2020年10月7日

Swoole从入门到入土(9)——TCP服务器[协程风格]

摘要: 上一篇,我们一起初步接触了协程。我相信只有一节的讨论,很多小伙伴对于“协程”与“线程”的区分可能还有点模糊。我们这里以两者的比较作为本篇开头,进行一番比较。 首先,“协程”与“线程”的任务调度机制不一样。“协程”重在“协调”,“线程”重在“抢占”。 举个例子:现在有一个任务,需要5个“子协程”同时进 阅读全文

posted @ 2020-10-07 18:17 咚..咚 阅读(655) 评论(0) 推荐(0) 编辑

Swoole从入门到入土(8)——协程初探

摘要: 这一章节“协程”话题的讨论是为了让我们对之后协程风格服务端有更全面的了解。所以我们需要先一起了解一下什么是协程?协程有什么作用? 当大家第一次看到“协程”这个词的时候,应该都一样会打开某度、某歌搜索一翻,然后搜到一堆很玄幻的概念,比如以下这一句:“协程(coroutine)也是一种程序组件。相对子例 阅读全文

posted @ 2020-10-07 11:50 咚..咚 阅读(822) 评论(0) 推荐(0) 编辑

2020年10月6日

Swoole从入门到入土(7)——TCP服务器[大杂烩]

摘要: 这一篇是异步风格的TCP服务器的最后一篇,主要的目的是疏理之前几篇没提到的一些比较有用的属性、配置、函数与事件,当然不是全部。如果想知道全部,请查看官网。 1、属性 Swoole\Server->setting:Server::set() 函数所设置的参数会保存到 Server->$setting 阅读全文

posted @ 2020-10-06 17:38 咚..咚 阅读(792) 评论(0) 推荐(0) 编辑

2020年10月2日

Swoole从入门到入土(6)——TCP服务器[粘包]

摘要: 在了解Swoole下如何处理粘包问题之前,我们需要先了解什么是“粘包”。我们以下面这张图进行普及: 假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下几种情况。(1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;(2)服 阅读全文

posted @ 2020-10-02 18:24 咚..咚 阅读(606) 评论(0) 推荐(0) 编辑

2020年10月1日

Swoole从入门到入土(5)——TCP服务器[异步任务]

摘要: 无论对于B/S还是C/S,程序再怎么变,唯一不变的是用户不想等太久的躁动心情。所以服务端对于客户的请求,能有多快就多快。如果服务端需要执行很耗时的操作,就需要异步任务处理机制,保证当前的响应速度不受影响。 现在以下面的一个例子为引子: <?php $server = new Swoole\Serve 阅读全文

posted @ 2020-10-01 18:00 咚..咚 阅读(475) 评论(0) 推荐(0) 编辑

2020年9月8日

Swoole从入门到入土(4)——TCP服务器[正确重启]

摘要: 在上一篇中,我们提到了一个配置项max_wait_time。这个配置项决定了在服务端在进程经束的时候,在max_wait_time时间内onWorkerStop事件会完成扫尾工作。 那什么时候worker进程会结束呢?那当然是手动关闭(管理进程收到重启、关闭信号后)或者自动关闭(达到 max_req 阅读全文

posted @ 2020-09-08 10:44 咚..咚 阅读(870) 评论(0) 推荐(0) 编辑

2020年9月3日

Swoole从入门到入土(3)——TCP服务器[基本配置项]

摘要: 在这一节的开篇,让我们先解决上一节的“配置”话题。对于server对象,有很多配置项决定了服务端的行为,可以用set的函数进行配置的设置。 1、函数set:用于设置运行时的各项参数。服务器启动后通过 $serv->setting 来访问 Server->set 方法设置的参数数组。 Swoole\S 阅读全文

posted @ 2020-09-03 21:50 咚..咚 阅读(723) 评论(0) 推荐(0) 编辑

导航