Swoole 是一个使用纯 C 语言编写的(Swoole 4 开始逐渐改为通过 C++ 编写),基于异步事件驱动和协程的并行网络通信引擎,为PHP提供高性能网络编程支持。
Swoole 是运行在PHP下的一个extesion扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而 Swoole 扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。
Swoole 底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js 等全异步的框架不同,Swoole既支持全异步,也支持同步。
Swoole 是开源免费的自由软件,授权协议是Apache2.0。企业和个人开发者均可免费使用Swoole的代码,并且在Swoole之上所作的修改可用于商业产品,无需开源(注:必须保留原作者的版权声明)。
Swoole 使用纯C/C++编写,不依赖其他第三方库。
PHP这门语言从诞生到现在二十多年了,一直是作为Web领域快速开发的首选语言之一,日常场景就是,从数据库取出数据,经过一定的算法逻辑运算,对模板进行渲染并直接输出到Web浏览器。或者作为服务端的接口给网站、公众号、小程序、APP提供接口,然后由前端的VUE等展示。
但是在某些场景还是有局限性,比如即时通讯类需要维持长链接的项目、直播类项目、游戏类项目等,使用传统的PHP不借助其它外力根本无法开发诸如此类的项目。
还有之前 PHP 一直被诟病的一个原因就是它是同步阻塞式语言,这在 Web 应用这种 IO 密集型的领域对于编写高并发高性能的应用而言,是一个重大阻碍。
Swoole 可以让PHP 开发人员可以轻松编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP 以及 WebSocket 服务。
Swoole 还为PHP提供了异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发swoole_table,Channel,Lock,进程间通信IPC等丰富的功能特性。
Swoole2.0支持了类似Go语言的协程,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。
有了 Swoole 之后,使得 PHP 语言在异步 IO 和网络通信领域开疆拓土,让 PHP 不再局限于 Web 领域,并且有望在工业级技术方面与 Node.js 和 Go 语言展开角逐。从某种角度上说,Swoole 让 PHP 插上了异步的翅膀,让它飞得更高。
Swoole 比较适合用于服务器端开发,支持类似Go语言的协程,可以使用完全同步的代码实现自动协程调度。
而 Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。
Swoole 可以广泛应用于互联网、实时通讯、云计算、 网络游戏、物联网(IOT)、车联网、智能家居、微服务、数据库连接池等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。