× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

入门指引

Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而Swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后底层会自动回调指定的PHP函数。

Swoole要求使用者必须具备一定的Linux/Unix环境编程基础,《学习Swoole需要掌握哪些基础知识》 本文列出了基础知识清单。

Server

强大的TCP/UDP Server框架,支持多线程,EventLoop,事件驱动,异步,Worker进程组,Task异步任务,毫秒定时器,SSL/TLS隧道加密。

  • Http\ServerServer的子类,内置了Http的支持
  • WebSocket\ServerHttp\Server的子类,内置了WebSocket的支持
  • Redis\ServerServer的子类,内置了Redis服务器端协议的支持

子类可以调用父类的所有方法和属性

Client

TCP/UDP/UnixSocket客户端,支持IPv4/IPv6,支持SSL/TLS隧道加密,支持SSL双向证书,支持同步并发调用,支持异步事件驱动编程。

Coroutine

Swoole2.0开始内置协程(Coroutine)的能力,提供了具备协程能力IO接口(统一在命名空间Swoole\Coroutine\*)。

协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。Swoole可以为每一个请求创建对应的协程,根据IO的状态来合理的调度协程,这会带来了以下优势:

开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。

Process

进程管理模块,可以方便的创建子进程,进程间通信,进程管理。

Table

基于共享内存和自旋锁实现的超高性能内存表。彻底解决线程,进程间数据共享,加锁同步等问题。

Table的性能可以达到单线程每秒读写200W

Event

EventLoop API,让用户可以直接操作底层的事件循环,将socketstream,管道等Linux文件加入到事件循环中。

eventloop接口仅可用于socket类型的文件描述符,不能用于磁盘文件读写