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.\n";
});

$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, $data);
});

$serv->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});

$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

 Tags :

Donate:| 文章有帮助,可以 请我喝杯咖啡

Powered by foxwho.com