PHP的异步网络通信扩展Swoole
Table of Contents
PHP在大部分程序员印象中都是用来做Web网站的。PHP没有像Python的Twisted、Tornado,Java的Netty、Mina,JavaScript的Node.js等框架,无法实现异步网络通信程序。PHP的Swoole扩展就是为了弥补此项缺陷而诞生的开源项目。Swoole是一个标准的PHP扩展,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。
Swoole与Node.js非常相似,不同之处是Swoole在并行提供了底层支持。Node.js是一个单进程单线程的程序,在多核服务器上无法发挥全部CPU核的计算能力。需要程序员自行使用child_process/cluster扩展或者启动多实例,使程序能够利用到多核优势。而Swoole在底层就支持了多线程/多进程,程序启动后就会创建好多个IO线程和多个Worker进程。程序员仅需配置线程/进程数量即可。
使用Swoole开发的TCP服务器程序:
$serv = new swoole_server(\"127.0.0.1\", 9501);
$serv->on(\"connect", function ($serv, $fd){
echo \"Client:Connect.\
\";
});
$serv->on(\"receive\", function ($serv, $fd, $from_id, $data) {
$serv->send($fd, $data);
});
$serv->on(\"close\", function ($serv, $fd) {
echo \"Client: Close.\
\";
});
$serv->start();
Swoole同样也内置了http_server和WebSocket服务器的支持。swoole_http_server与传统的php-fpm不同,它是在PHP内进行事件循环的,基于swoole_http_server完全可以开发出类似Java应用服务器一样,可以控制完整对象生命周期的程序。swoole_http_server天然支持异步IO,可以很方便的实现支持大量TCP连接的Comet服务。swoole_websocket_server可以用来实现支持Web实时推送的程序。
使用Swoole的Web服务器程序:
$http = new swoole_http_server(\"0.0.0.0\", 9501);
$http->on(\"request", function ($request, $response) {
$response->header(\"Content-Type\", \"text/html; charset=utf-8\");
$response->end(\"
<h1>Hello Swoole. #\".rand(1000, 9999).\"</h1>
\");
});
$http->start();
Swoole扩展 ¶
PHP的高性能Server框架Swoole,使用纯C编写,以PHP扩展的方式提供了一个强大的异步并行Server框架,特性如下:
基于linux epoll+eventfd,不依赖libevent等第三方库,在Linux下可直接编译。
支持3种模式Call、Writer和Worker。
网络模块是完全异步非阻塞的,而且实现了读写分离,无锁设计。
PHP的高性能Server框架Swoole,使用纯C编写,以PHP扩展的方式提供了一个强大的异步并行Server框架,特性如下:
基于linux epoll+eventfd,不依赖libevent等第三方库,在Linux下可直接编译。
支持3种模式Call、Writer和Worker。
网络模块是完全异步非阻塞的,而且实现了读写分离,无锁设计。
项目地址 ¶
https://github.com/matyhtf/swoole
来自:
http://rango.swoole.com/archives/440
首发 http://www.foxwho.com/article/142
同步 foxwho(神秘狐)的领地 http://www.foxwho.com