Swoole PHP高性能编程

本文介绍如何利用PHP的pcntl、posix等扩展及Swoole框架编写高性能的Socket应用服务器,探讨Phalcon框架的使用,并提供Swoole的安装指南与TCPServer/Client实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实超出浏览器,PHP仍有用武之地,Linux上PHP通过pcntl、posix、sysvshm、sysvmsg、libevent、 swoole、proctitle等PECL扩展支持,用纯PHP就可以编写不依赖Nginx/Apache的高性能Socket应用服务器(独立控制进程,以守护进程运行)

Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的PHP5框架http://myleftstudio.com/

Java代码   收藏代码
  1. <?php  
  2.   
  3. class ControllerBase extends Phalcon\Mvc\Controller  
  4. {  
  5.     protected function forward($uri)  
  6.     {  
  7.         //TODO 考虑这里是否可以接收url中的参数  
  8.         $uriParts = explode('/', $uri);  
  9.         return $this->dispatcher->forward(  
  10.             array(  
  11.                 'controller' => $uriParts[0],  
  12.                 'action' => $uriParts[1]  
  13.             )  
  14.         );  
  15.     }  
  16.   
  17.     protected function redirect($uri = '', $param = array())  
  18.     {  
  19.         $url = new Phalcon\Mvc\Url();  
  20.         $uri .= !empty($param) ? '/?' . http_build_query($param) : '';  
  21.         header("location:" . $url->get($uri));  
  22.         die;  
  23.     }  
  24.   
  25.     /** 
  26.      * 获取当前controller下的方法 数据 
  27.      * @return string 
  28.      */  
  29.     public function getActionInfo()  
  30.     {  
  31.         $action = '/' . $this->dispatcher->getControllerName() . '/' . $this->dispatcher->getActionName();  
  32.         return $this->session->get($action);  
  33.     }  
  34. }  

 

Swoole PHP语言的异步、并行、高性能网络通信框架, 使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL数据库连接池,AsyncTask,消息队列, 毫秒定时器,异步文件读写,异步DNS查询。Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

Java代码   收藏代码
  1. cd swoole  
  2. phpize  
  3. ./configure  
  4. make   
  5. sudo make install  

安装成功

编译安装成功后,修改php.ini加入

Java代码   收藏代码
  1. extension=swoole.so  
通过 php -mphpinfo()来查看是否成功加载了swoole,

如果没有,可能是 php.ini的路径不对,可以使用 php -i |grep php.ini来定位到 php.ini的绝对路径。
TCP Server
Java代码   收藏代码
  1. <?php //server.php  
  2. $serv = new swoole_server("127.0.0.1"9501);  
  3. $serv->set(array(  
  4.     'worker_num' => 8,   //工作进程数量  
  5.     'daemonize' => true//是否作为守护进程  
  6. ));  
  7. $serv->on('connect', function ($serv, $fd){  
  8.     echo "Client:Connect.\n";  
  9. });  
  10. $serv->on('receive', function ($serv, $fd, $from_id, $data) {  
  11.     $serv->send($fd, 'Swoole: '.$data);  
  12.     $serv->close($fd);  
  13. });  
  14. $serv->on('close', function ($serv, $fd) {  
  15.     echo "Client: Close.\n";  
  16. });  
  17. $serv->start();  
TCP Client 
Java代码   收藏代码
  1. <?php  
  2. $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);  
  3. //设置事件回调函数  
  4. $client->on("connect", function($cli) {  
  5.     $cli->send("hello world\n");  
  6. });  
  7. $client->on("receive", function($cli, $data){  
  8.     echo "Received: ".$data."\n";  
  9. });  
  10. $client->on("error", function($cli){  
  11.     echo "Connect failed\n";  
  12. });  
  13. $client->on("close", function($cli){  
  14.     echo "Connection close\n";  
  15. });  
  16. //发起网络连接  
  17. $client->connect('127.0.0.1'95010.5);  

php命令行开启监听

Java代码   收藏代码
  1. php server.php    

 客户端访问

浏览器运行代码

Java代码   收藏代码
  1. <?php  
  2. $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞  
  3. $client->connect('127.0.0.1'95030.5);////发起网络连接  
  4. $client->send("hello world\n");  
  5. $data = $client->recv(1024);  
  6. echo $data;  
  7. unset($client);  

php+swoole目前的主要竞争对象是Node.js,两者的使用场景差不多。php在web领域的庞大使用量,如果你的现有项目也是用php构建的,用swoole写后端服务的时候可以复用大量的现有模块,这对企业开发的一致性是很重要的,理论上讲只需要维护一套基础就行了

李丹阳  https://github.com/LinkedDestiny/swoole-doc

phpstorm-swoole-ide-helper 代码自动补全http://hudeyong926.iteye.com/admin/blogs/2285968

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值