博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swoole PHP高性能编程
阅读量:6575 次
发布时间:2019-06-24

本文共 2727 字,大约阅读时间需要 9 分钟。

其实超出浏览器,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网络客户端,异步,连接池,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 -m
phpinfo()来查看是否成功加载了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目前的主要竞争对象是,两者的使用场景差不多。php在web领域的庞大使用量,如果你的现有项目也是用php构建的,用swoole写后端服务的时候可以复用大量的现有模块,这对企业开发的一致性是很重要的,理论上讲只需要维护一套基础就行了

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

phpstorm-swoole-ide-helper 代码自动补全

转载地址:http://kemjo.baihongyu.com/

你可能感兴趣的文章
设计模式 总揽 通过这篇随笔可以访问所需要了解的设计模式
查看>>
Photoshop和WPF双剑配合,打造炫酷个性的进度条控件
查看>>
2014最不受欢迎10编程语言种
查看>>
LVM逻辑卷管理@设备、格式、摩、引导自己主动安装一个完整的章节
查看>>
iOS 开发笔记-加载/初始化
查看>>
(转)SqlServer基础之(触发器)(清晰易懂)
查看>>
lintcode :Count and Say 报数
查看>>
浅谈矩阵分解在推荐系统中的应用
查看>>
视频编解码器,bbv 缓冲区溢出和下溢
查看>>
一些小知识
查看>>
android 71 ArrayAdapter和SimpleAdapter
查看>>
android:#FFFFFFFF 颜色码解析
查看>>
POJ 2151 Check the difficulty of problems (动态规划-可能DP)
查看>>
jQuery-1.9.1源码分析系列(十) 事件系统——事件包装
查看>>
谢惠民,恽自求,易法槐,钱定边编数学分析习题课讲义习题参考解答
查看>>
禅道 Rest API 开发
查看>>
在opencv3中实现机器学习之:利用逻辑斯谛回归(logistic regression)分类
查看>>
springmvc(4)注解简单了解
查看>>
并集(union和union all的区别)、交集、差集、全连接
查看>>
Fragment与FragmentActivity通信封装
查看>>