Swoole 是什么?
Swoole不是一个像Zend Framework、CakePHP、Yii、symfony、ThinkPHP等一样的框架,也不是一个像WordPress、Drupal、Discuz、UChome等开源产品看齐的项目。 Swoole的目标是向Java框架、Ruby On Rails、Python DjangoPylons等一流框架发起挑战。
Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而Swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后底层会自动回调指定的PHP函数。
Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
Swoole 特性(即 Swoole可以做些什么)
Swoole 使用 C/C++ 语言编写,提供了 PHP 语言的异步多线程服务器、异步 TCP/UDP 网络客户端、异步 MySQL、异步 Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写、异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
除了异步 IO 的支持之外,Swoole 为 PHP 多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大 简化多进程并发编程的工作。其中包括了并发原子计数器、并发 HashTable、Channel、Lock、进程间通信IPC 等丰富的功能特性。
Swoole4.0 支持了类似 Go 语言的协程,可以使用完全同步的代码实现异步程序。PHP 代码无需额外增加任何 关键词,底层自动进行协程调度,实现异步IO。
为什么要使用Swoole?
PHP没有像Python的Twisted、Tornado,Java的Netty、Mina,JavaScript的Node.js框架,它无法实现异步网络通信程序。而Swoole扩展就是为了弥补这个缺陷而诞生的开源项目。
Swoole作为PHP的扩展,其核心目的是为了解决PHP在实现Server服务器开发中遇到的一系列问题,这些问题源于PHP自身执行效率上。所以在服务器开发中,一般不会使用PHP来解决问题,所以才有了Swoole重新定义了PHP的说法。
- 常驻内存,避免重复再带来的性能损耗,提升海量性能。
传统的PHP框架,在每次处理请求时,都要做一遍加载框架文件、配置等操作。这可能已经成为性能问题的一大原因,而使用Swoole则没有这个问题,它可以一次加载多次使用。
- 协程异步,提高对I/O密集型场景并发处理能力。
说到协程就必须先说说进程和线程,众所周知,进程是很占用资源的,为了处理请求大量创建进程肯定是得不偿失的。而多线程应用就比较多了,在CPU层面有几个核心就会执行几个任务,线程一旦创建就多了,自然会存在线程调度的损耗。
而协程是在单线程基础上实现的,可以最大限度利用CPU资源,而不会在I/O等待时白白浪费CPU。当然协程越多占用的内存也就越多,不过这个是可以接收的。相比进程和线程,占用的资源是相对比较少的。
使用协程时,如果遇到文件读写、请求接口等场景,会自动挂起协程,把CPU让给其它协程执行任务,这样可以提升单线程的CPU资源利用率,减少浪费从而提高性能。
- 方便地开发HTTP、TCP、UDP、WebSocket等应用,可以与硬件通信。
- PHP高性能微服务架构
环境依赖
仅支持 Linux、FreeBSD、MacOS 三种操作系统
在Windows平台,可使用CygWin或WSL(Windows Subsystem for Linux)
Linux 内核版本 2.3.32 以上
gcc-4.8或更高版本,依赖C++11
编译为 libswoole.so 作为 C/C++ 库时需要使用 cmake-2.4 或更高版本
建议使用 Ubuntu14、CentOS7 或更高版本的操作系统
低版本系统(如CentOS 6)可以使用RedHat提供的devtools编译