文档章节

重新定义PHP : swool

旋转木马-千里马
 旋转木马-千里马
发布于 2015/12/29 17:00
字数 1195
阅读 418
收藏 1

       使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。 Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。

与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。

swoole_server是异步服务器,所以是通过监听事件的方式来编写程序的。当对应的事件发生时底层会主动回调指定的PHP函数。如当有新的TCP连接进入时会执行onConnect事件回调,当某个连接向服务器发送数据时会回调onReceive函数。UDP服务器与TCP服务器不同,UDP没有连接的概念。

启动Server后,客户端无需Connect,直接可以向Server监听的9502端口发送数据包。对应的事件为onPacket。Http服务器只需要关注请求响应即可,所以只需要监听一个onRequest事件。当有新的Http请求进入就会触发此事件。事件回调函数有2个参数,一个是$request对象,包含了请求的相关信息,如GET/POST请求的数据。另外一个是response对象,对request的响应可以通过操作response对象来完成。$response->end()方法表示输出一段HTML内容,并结束此请求。WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手。

握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。建立连接后客户端与服务器端就可以双向通信了。 * 客户端向服务器端发送信息时,服务器端触发onMessage事件回调 * 服务器端可以调用$server->push()向某个客户端(使用$fd标识符)发送消息。swoole提供了类似JavaScript的setInterval/setTimeout异步高精度定时器,粒度为毫秒级。在Server程序中如果需要执行一下很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。

Swoole提供了异步任务处理的功能,可以投递一个异步任务到TaskWorker进程池中执行,不影响当前请求的处理速度。创建一个TCP的同步客户端,此客户端可以用于连接到我们第一个示例的TCP服务器。向服务器端发送一个hello world字符串,服务器会返回一个 Server: hello world字符串。这个客户端是同步阻塞的,connect/send/recv 会等待IO完成后再返回。同步阻塞操作并不消耗CPU资源,IO操作未完成当前进程会自动转入sleep模式,当IO完成后操作系统会唤醒当前进程,继续向下执行代码。基于Swoole扩展开发的PHP web server&应用服务器, 内置框架。提供统一注册树,数据库操作,模板,Cache,日志,队列,上传管理,用户管理等丰富的功能特性。

swoole框架相比apache/fpm,主要是节省PHP框架和全局对象每次请求创建销毁带来的性能损耗。如果你的PHP代码是裸echo的方式,swoole框架并没有性能优势。swoole框架给程序员提供了最大的空间,与http请求无关的全局对象只需要构造一次。程序中还可以对某些对象和数据进行缓存控制。9501就是swoole服务器监听的地址。root设置为静态文件的目录。当请求静态文件是由Nginx/Apache直接处理,当请求的文件不存在时,发送给Swoole服务器,来进行处理。

© 著作权归作者所有

共有 人打赏支持
旋转木马-千里马
粉丝 15
博文 83
码字总数 85714
作品 0
海淀
程序员
私信 提问
需要关注的小众语言

Clojure,web框架,http://www.oschina.net/p/luminus Elixir,web框架,http://www.oschina.net/p/phoenix-elixir 当然还有ruby on rails php,laravel/lumen,swool 有时间了解下......

丑矬穷
2015/09/08
151
0
php-fpm的pool,php-fpm慢执行日志,open_basedir,php-fpm进程管理

php-fpm的pool 方法1:在大的配置文件里吗统一实现 编辑配置文件 重新加载配置 方法2:总分的方法,先在大的配置文件里设置一个大的目录,再在这个目录里面增加2个pool 1.编辑大的配置文件 ...

非此即彼
03/20
0
0
限定某个目录禁止解析php,限制user_agent,php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 1.限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upload> p...

hhpuppy
11/20
0
0
限定目录禁止解析php-限制user_agent-php相关配置

限定目录禁止解析php 防止乱上传php文件被执行 1.修改虚拟主机配置文件:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf

ZHENG-JY
08/07
0
0
Apache与PHP结合-Apache默认虚拟主机

配置httpd支持php: httpd主配置:/usr/local/httpd/conf/httpd.conf; 检查配置是否有语法错误:/usr/local/httpd/bin/apachectl -t 重新加载配置文件:/usr/local/httpd/bin/apachectl gr...

ZHENG-JY
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部