usiang / study

手把手教你写PHP协程扩展

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

教程

开发环境

PHP版本:7.3.5

操作系统:我希望你是alpine

你也可以直接使用我为你准备的Dockerfile,以保证和我的开发环境一致,避免不必要的麻烦:

docker build -t study -f docker/Dockerfile .

《PHP扩展开发》--协程

第一阶段 协程基础模块

1、编写config.m4文件

2、开发规范

3、整理文件

4、理解PHP生命周期的过程

5、梳理一下架构

6、协程创建(一)

7、协程创建(二)

8、协程创建(三)

9、协程创建(四)

10、协程创建(五)

11、协程创建(六)

12、协程创建(七)

13、协程创建(八)

14、协程yield

15、协程resume

16、协程getCid

17、修复一些bug(一)

18、修复一些bug(二)

19、协程isExist

20、修复一些bug(三)

21、协程defer

22、协程短名(一)

23、协程短名(二)

到目前为止,我们已经实现了协程常用的关键接口,可以算是本书的第一版吧,接下来,我将会带领大家去实现网络的部分。我们的最终目标是去实现一个高性能的协程化的服务器。因为这其中涉及到了比较多的数据结构,所以需要些时间来构思文章内容。

大家可以提前去学习下以下知识点:IO多路复用(重点学习epoll)、数据结构中的堆、定时器。

敬请期待。

第二阶段 网络模块

24、引入libuv

25、sleep(一)

26、sleep(二)

27、sleep(三)

28、sleep(四)

29、sleep(五)

30、server创建(一)

31、server创建(二)

32、server接收请求

33、server监听的封装

34、server接收数据

35、server发送数据

36、server错误码

37、压测server(一)

38、socket可读写时候调度协程的思路

39、全局变量STUDYG

40、定义协程化的Socket类

41、协程化Socket::Socket

42、实现coroutine::Socket::bind和listen

43、协程化Socket::accept

44、协程化Socket::wait_event

45、在事件到来时resume对应的协程

46、协程化Socket::recv和send

47、实现coroutine::Socket::close

48、协程化服务器(一)

49、协程化服务器(二)

50、协程化服务器(三)

51、协程化服务器(四)

到目前位置,我们已经实现了一个协程化的服务器。实际上,对于协程的理解效果已经达到了,但是,我们学习是不能够停止的,我们接下来会让这个扩展更加的强大。我们会去实现协程在多线程里面可用,以及channel,协程锁等等一些列的功能。

第三阶段 优化(一)

52、修复一些bug(四)

53、修复一些bug(五)

54、修复一些bug(六)

55、server关闭连接

56、压测server(二)

57、修复一些bug(七)

58、错误使用协程库导致的Bug(一)

About

手把手教你写PHP协程扩展


Languages

Language:C++ 75.4%Language:C 15.3%Language:M4 6.1%Language:PHP 1.7%Language:Dockerfile 1.5%Language:Shell 0.1%