入门指引
Swoole
虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP
函数。
- 新手入门教程:https://github.com/LinkedDestiny/swoole-doc (已停更)
- Swoole 简明指南:https://linkeddestiny.gitbooks.io/easy-swoole/content/
Swoole
要求使用者必须具备一定的Linux/Unix
环境编程基础,《学习Swoole需要掌握哪些基础知识》 本文列出了基础知识清单。
Server
强大的TCP/UDP Server
框架,支持多线程,EventLoop
,事件驱动,异步,Worker
进程组,Task
异步任务,毫秒定时器,SSL/TLS
隧道加密。
swoole_http_server
是swoole_server
的子类,内置了Http
的支持swoole_websocket_server
是swoole_http_server
的子类,内置了WebSocket
的支持swoole_redis_server
是swoole_server
的子类,内置了Redis
服务器端协议的支持
子类可以调用父类的所有方法和属性
Client
TCP/UDP/UnixSocket
客户端,支持IPv4/IPv6
,支持SSL/TLS
隧道加密,支持SSL
双向证书,支持同步并发调用,支持异步事件驱动编程。
Event
EventLoop API
,让用户可以直接操作底层的事件循环,将socket
,stream
,管道等Linux
文件加入到事件循环中。
eventloop
接口仅可用于socket
类型的文件描述符,不能用于磁盘文件读写
Async
异步IO接口,提供了 异步文件系统IO,定时器,异步DNS查询,异步MySQL等API,异步Http客户端,异步Redis客户端。
- swoole_timer 异步毫秒定时器,可以实现间隔时间或一次性的定时任务
- swoole_async_read/swoole_async_write 文件系统操作的异步接口
Coroutine
Swoole在2.0开始内置协程(Coroutine)的能力,提供了具备协程能力IO接口(统一在命名空间Swoole\Coroutine*)。
协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。Swoole可以为每一个请求创建对应的协程,根据IO的状态来合理的调度协程,这会带来了以下优势:
开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。
同时由于swoole是在底层封装了协程,所以对比传统的php层协程框架,开发者不需要使用yield关键词来标识一个协程IO操作,所以不再需要对yield的语义进行深入理解以及对每一级的调用都修改为yield,这极大的提高了开发效率。
Process
进程管理模块,可以方便的创建子进程,进程间通信,进程管理。
Buffer
强大的内存区管理工具,像C
一样进行指针计算,又无需关心内存的申请和释放,而且不用担心内存越界,底层全部做好了。
Table
基于共享内存和自旋锁实现的超高性能内存表。彻底解决线程,进程间数据共享,加锁同步等问题。
swoole_table
的性能可以达到单线程每秒读写200W
次