发布于 2014-06-20 11:31:13 | 342 次阅读 | 评论: 0 | 来源: 网友投递
这里有新鲜出炉的Swoole框架中文教程,程序狗速度看过来!
Swoole Framework PHP Web开发框架
Swoole是一个php扩展也是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率。最少的性能损耗,换取最大的开发效率。利用Swoole框架,开发一个复杂的Web功能,可以在很短的时间内完成!
Swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率。最少的性能损耗,换取最大的开发效率。利用Swoole框架,开发一个复杂的Web功能,可以在很短的时间内完成!
swoole 1.7.3 发布,PHP的异步并行扩展swoole,最近增加了多进程管理模块swoole_process,用来替代PHP的pcntl扩展。
PHP自带的pcntl,存在很多不足,如
pcntl无法用在fpm/apache中
pcntl没有提供进程间通信的功能
pcntl不支持重定向标准输入和输出
pcntl只提供了fork这样原始的接口,容易使用错误
swoole_process提供了比pcntl更强大的功能,更易用的API,使PHP在多进程编程方面更加轻松。swoole_process提供了如下特性:
swoole_process提供了基于unixsock的进程间通信,使用很简单只需调用recv/send即可
swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据
swoole_process允许用于fpm/apache的Web请求中
配合swoole_event模块,创建的PHP子进程可以异步的事件驱动模式
swoole_process提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信
swoole_process可以安全地用于fpm/apache环境下
代码示例:
$worker_num = 8;
for($i = 0; $i < $worker_num; $i++)
{
$process = new swoole_process('callback_function', true);
$pid = $process->start();
$workers[$pid] = $process;
}
foreach($workers as $pid => $process)
{
$process->write("hello worker[$pid]n");
echo "From Worker: ".$process->read();
}
for($i = 0; $i < $worker_num; $i++)
{
$ret = swoole_process::wait();
$pid = $ret['pid'];
unset($workers[$pid]);
echo "Worker Exit, PID=".$pid.PHP_EOL;
}
function callback_function(swoole_process $worker)
{
//echo "Worker: start. PID=".$worker->pid."n";
//recv data from master
$recv = $worker->read();
echo "From Master: $recvn";
//send data to master
$worker->write("hello mastern");
sleep(2);
$worker->exit(0);
}
子进程事件驱动模式
function callback_function_async(swoole_process $worker)
{
//echo "Worker: start. PID=".$worker->pid."n";
//recv data from master
$GLOBALS['worker'] = $worker;
swoole_event_add($worker->pipe, function($pipe) {
$worker = $GLOBALS['worker'];
$recv = $worker->read();
echo "From Master: $recvn";
//send data to master
$worker->write("hello mastern");
sleep(2);
$worker->exit(0);
});
}
PHP创建一个Python子进程,并与之通信
$process = new swoole_process('pyhon_process', true);
$pid = $process->start();
function pyhon_process(swoole_process $worker)
{
$worker->exec('/usr/bin/python', array("echo.py"));
}
$process->write("hello worldn");
echo $process->read();
$ret = swoole_process::wait();
var_dump($ret);
Python程序echo.py
import sys
def main():
s = raw_input()
print "Python:" + s
main()