Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
10
篇与
的结果
2023-08-09
ReactPHP── PHP版的Node.js
ReactPHP── PHP版的Node.js从名字说起虽然ReactPHP项目已经发展了有4年之久,但是对于其称呼显得有点混乱。在开源中国为其建立的项目主页上,其被命名为React,或者node.PHP。国外的一些的博客谈及这个项目时,多数使用的是ReactPHP。到底哪种说法比较标准呢?我们不妨来看看官方的态度。此项目的官方主页是http://www.reactphp.org。打开官网,你会发现网站的title是React,其logo上的文字为reactphp。可以看出,官方更倾向于被命名为React或者ReactPHP。我建议使用ReactPHP作为其名称。原因大概有两个。React单词的意思太泛,并且已经有一些项目的名称与React相关,容易引起误解。目前国内使用ReactPHP的人比较少,相关资料文档也比较少。在国外它一般被称为ReactPHP,使用ReactPHP在国外检索资料更容易。ReactPHP与Node.js有着相同的特点许多人认为ReactPHP是Node.js的php版本,这是有一定道理的。他们的确有很多相似的特点。事件驱动,异步执行,非阻塞IO什么是事件驱动?所谓事件驱动,简单的说就是,你告诉我你关注什么事情,等事情发生的时候我会主动通知你,然后你再作相应的处理。这样可以就可以把你解放出来,你只关注于处理好相应事件即可。采用事件驱动有什么优势呢?相对于常见的多进程编程,能更好的利用CPU资源。多进程编程会使进程数量变多,进程上下文切换频繁会增加系统压力,浪费宝贵的CPU资源。相对于多线程编程而言,可以降低编程复杂度。开发者不必再考虑线程间资源共享导致资源竞争等问题。ReactPHP和Node.js都采用了事件驱动和非阻塞IO。从官方主页的宣传语上就可以得到印证。在Node.js的官网上有一段话:Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient。上面的意思是,Node.js使用事件驱动和非阻塞IO模型,以保证轻量级和高效。在ReactPHP官网也有一段话:Event-driven, non-blocking I/O with PHP.上面的意思是,ReactPHP使用PHP语言实现了事件驱动和非阻塞。ReactPHP和Node.js在实现事件驱动机制时也有相似之处。在事件的监听上,ReactPHP和Node.js都使用了libev库,但是也都是不只使用libev库。由于libev对windows支持不够好。因此,Node.js中封装了一层libuv。libuv是基于windows的IOCP和*nix的libev进行封装。而ReactPHP除了使用libev库外,还是用了其他的库。如,libevent。ReactPHP和Node.js都各自有自己的生态圈。在各自生态圈中的一些模块一般都采用了事件驱动,异步编程的风格。如,ReactPHP的Stream模块,提供了以下几个事件:drain、error、close、pipe、end、data。相应的,在Node.js中也有一些类似的事件。Node.js的Net模,其中的net.Socket对象就有以下事件:connect、data、end、timeout、drain、error、close等。这样,开发人员只需要知道自己关注那些事件,并在这些事件上注册回调函数。等事件发生的时候,会主动执行这些注册的回调函数。这些回调函数都是异步执行的,这些函数虽然在注册的时候有先后顺序,但是在执行的时候是无序的,随机的,执行顺序和事件发生顺序相关。事件驱动再加上非阻塞IO,就可以极大的利用系统资源,代码无需阻塞等待资源可用。单进程单线程ReactPHP和Node.js一样都是采用了单进程和单线程的运行方式。单进程,单线程方式,没有多线程的资源抢占和上下文切换,高效率的运行,维护着一个事件队列。这种运行方式,通常情况下瓶颈一般在CPU而不是内存。由于单进程,单线程只能在一个CPU上运行,本身不能充分利用多个CPU资源。为了解决这个问题,我们可以启动多个进程,监听不同的端口,前端使用nginx等做代理,把请求分发到不同的进程上。对于多进程的管理上,现在已经有不少开源项目可以实现。如,php-pm(https://github.com/php-pm/php-pm)。ReactPHP性能压测相对于传统的nginx+php-fpm方式,ReactPHP的性能表现如何呢?现在我们来做下性能压测。服务器环境如下:8核CPUPHP版本为5.5.15,使用opcache扩展操作系统为Centos5Nginx版本为nginx/1.2.9ReactPHP版本为0.4为了公平起见,我们php-fpm和ReactPHP都只启动一个进程。压测工具我们使用ab,Apache开源的http服务压测工具。我们压测分两种情况来进行:第一种情况是只输出简单的Hello World。第二种情况只进行一次简单的sql语句查询,select 1 as num。第一种情况:Hello World的压测结果如下,QPS:第二种情况:SQL查询的压测结果如下,QPS:可见,对于cpu密集型的应用,nginx+php-fpm的方式要比ReactPHP有更好的表现。但是对于数据库查询这样涉及网络IO的场景,ReactPHP的性能要远远好于nginx+php-fpm的方式。ReactPHP的应用场景根据上面的测试,ReactPHP更适合IO密集型的应用。以下是ReactpHP比较适合的应用场景。从RESTful API获取数据,并进行拼装输出只是请求api获取数据,然后进行简单的拼装,最后输出到客户端。本身业务逻辑不复杂。在请求的时候,可以同时对多个api进行请求,相对于顺序调用api的方式,会节省很多的时间,大大提高了响应的效率。实时推送,在线聊天实时推送和在线聊天都需要维护大量的链接。这个正是ReactpHP擅长的。他可以很轻松的维护上万的链接。分布式IO系统如一个数据库中间件层,它需要解析SQL为多条子SQL,然后把子SQL分发到不同的服务器查询数据,然后合并数据返回给客户端。这种情况下可以使用ReactPHP同时对多个数据库服务器进行查询。如何使用ReactPHPReactPHP可以使用composer安装,这个也是官方推荐的安装方式。首先安装composer。curl -s https://getcomposer.org/installer| php安装完成后,会在当前目录下生成一个composer.phar文件。然后我们使用composer.phar安装react。php ./composer.phar require react/react安装成功后,会在当前目录下生成一个vendor目录。下载的程序就在这个目录下。现在你就可以使用ReactPHP写程序了。例如,我们想提供一个http服务,我们将把客户端通过data参数提交的数据加上www.后进行返回。代码如下:<?phprequire 'vendor/autoload.php';$port = $argv[1];$app = function ($request, $response) { $response->writeHead(200, array('Content-Type' => 'text/plain')); $query = $request->getQuery(); $data = isset($query["data"]) ? $query["data"] : ""; $response->end("www.{$data}\n");};$loop = React\EventLoop\Factory::create();$socket = new React\Socket\Server($loop);$http = new React\Http\Server($socket, $loop);$http->on('request', $app);$socket->listen($port, '0.0.0.0');$loop->run();?>把上面的代码保持为文件reactphp.php。然后启动服务:php ./reactphp.php 5501最后,我们验证下效果,可以通过下面的方式访问。$curl http://10.101.80.141:5501/?data=bo56.comwww.bo56.comReactPHP也有自己的生态圈。如进行异步mysql查询的react-php。小结ReactPHP作为Node.js的PHP版本。在实现思路,使用方法,应用场景上的确有很多相似之处。但是ReactPHP毕竟比Node.js年轻,目前生态圈还是不如Node.js完善。目前文档也不是很完善,在国内应用也比较少。但是相信,它会越来越完善,应用越来越广。(责编:张之颖)作者简介信海龙,淘宝技术专家。2006年毕业于河北大学政法学院。之后,便踏上了互联网开发的不归路。目前已经有9年的互联网开发经验。2013年加入淘宝技术部,把工作中遇到的问题记录到博客(www.bo56.com)。同时也是多个开源项目的开发者和维护者。
2023年08月09日
6 阅读
0 评论
0 点赞
2023-08-09
5天学会一种 web 开发框架
5天学会一种 web 开发框架eb framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的经验写了一个to do list,按照这个清单,一条一条的学习,事半功倍,很快就能掌握 一共25条,即便很磨蹭,2小时也能搞定一条,25*2=50。只需要50小时就能掌握任意一种web框架各类web框架大同小异:现代web开发框架的6大元素,把握主线,就不会迷路建议把本文打印到一张A4纸,搞定一条打个勾web框架学习列表如何定义 url route如何组织 request handler 函数写一个最简单的request handler 函数如何从get/post请求中取出参数如何定义全局url 拦截函数如何获取/修改/存储 cookie,session数据如何修改/输出 http header 数据如何部部署app 程序服务器部署可以参考读python web 程序的9种部署方式如何配置开发环境如何配置静态文件访问如何访问数据库是否支持ORM支持orm如何维护表结构的变更如何定义/组织/初始化 数据表如何对接orm系统和现有的表结构掌握最基本的add/delete/按字段查询/count/slice/order by如何直接使用sql 访问数据库不支持orm (这样的web框架,不用也罢)如何使用模板系统如何组织/访问 模板文件的目录结构如何在模板中嵌入代码模板是否支持继承结构模板之间如何include如何自定义模板函数如何通过http get/post 获取远程数据如何parse json如何parse xml如何输出为 json如何处理状态码:404和50x如何处理文件上传可选的学习项目发送emaillog图片处理误区表单验证辅助函数,很多框架的表单验证部分实现的特别复杂,初学者完全不需要,手写代码处理就够用ORM中的hasone,manytomany,onetomany关系,概念很复杂,其实只是多写/少写一个查询字段的关系,学习成本太高,初学者完全不需要理会,直接跳过
2023年08月09日
16 阅读
0 评论
0 点赞
2023-08-08
tsf —— 来自腾讯的 PHP 协程解决方案
tsf —— 来自腾讯的 PHP 协程解决方案tsf (Tencent Server Framework) 是腾讯公司推出的 PHP 协程方案,基于 Swoole+PHP Generator 实现的 Coroutine。Tencent Server Framework 是快速服务器部署框架,PHP 现在可以像 Golang 一样用协程实现高并发服务器,同时支持同步阻塞,异步非阻塞回调,协程这 3 种 IO 模型。主要特性:基于 PHP,相比 C++ 开发更高效基于 Swoole 扩展,强大的异步 IO支持 PHP coroutine支持服务器监控器和提供接口要求:php5.5+Swoole1.7.18+linux,OS X
2023年08月08日
11 阅读
0 评论
0 点赞
2023-08-08
Yar – 并行的RPC框架(Concurrent RPC framework)
Yar – 并行的RPC框架(Concurrent RPC framework)Yar(yet another RPC framework, 教主问我为啥都是Ya打头, 呵呵, 因为这样名字好起)是我在3个多月前, 为了解决一个实际的问题, 而开发的一个PHP扩展的, RPC框架, 和现有的RPC框架(xml-rpc, soap)不同, 这是一个轻量级的框架, 支持多种打包协议(msgpack, json, php), 并且最重要的一个特点是, 它是可并行化的..考虑如下的场景:传统的Web应用, 一个进程, 一个请求, 天经地义. 然而, 当一个请求的处理中, 涉及到多出数据源, 并且他们之间具有一定的不依赖性.还是传统的Web应用, 一个应用随着业务快速增长, 开发人员的流转, 就会慢慢的进入一个恶性循环, 代码量上只有加法没有了减法. 因为随着系统变复杂, 牵一发就会动全局, 而新来的维护者, 对原有的体系并没有那么多时间给他让他全面掌握. 即使有这么多时间, 要想掌握以前那么多的维护者的思维的结合, 也不是一件容易的事情…那么, 长次以往, 这个系统将会越来越不可维护…. 到一个大型应用进入这个恶性循环, 那么等待他的只有重构了.那么, 能不能对这个系统做解耦呢?我们已经做了很多解耦了, 数据, 中间件, 业务, 逻辑, 等等, 各种分层. 但到Web应用这块, 还能怎么分呢, MVC我们已经做过了….基于此, Yar或许能解决你遇到的这俩个问题…Yar是一个非常轻量级的RPC框架, 我在实现Yar的时候, 追求了极致的轻量级, 它使用非常简单, 对于Server端:<?phpclass API {/**the doc info will be generated automatically into service info page.@params@return*/ public function api($parameter, $option = "foo") { } protected function client_can_not_see() { }}$service = new Yar_Server(new API());$service->handle();?>和Soap使用方法很相像吧? 是的, 就这样, 你的API类就可以对外提供服务了..Yar为了方便开发, 把文档和接口绑定到了一起, 对于上面的例子, 如果我们是简单的GET请求这个接口地址的话, 我们就会看到如下的信息页面:这样, 我们可以在注释中,把接口的信息标注好, 就可以让文档和接口在一起了.而对于Client端来说, 简单的串行调用, 会非常之简单:<?php$client = new Yar_Client("http://host/api/");$result = $client->api("parameter);?>这样一来, 如果你有多个服务, 你只需要一个client.那么, 最激动人心的并行化调用呢?<?phpfunction callback($retval, $callinfo) { var_dump($retval);}Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");Yar_Concurrent_Client::loop(); //send?>这样, 所有的请求会一次发出, 只要有任何一个请求完成, 回调函数”callback”就会被立即调用.这里还有一个细节, Yar见缝插针的不会浪费任何时间, 在这些请求发送完成以后, Yar会调用一次callback, 和普通的请求返回回调不同, 这次的调用的$callinfo参数为空.这样一来, 我们就可以先发送请求, 然后再第一次回调, 继续做我们当前进程的工作, 等所有工作结束以后, 再交给Yar去获取并行RPC的响应.<?phpfunction callback($retval, $callinfo) {if ($callinfo == NULL) { //做本地的逻辑 return TRUE; } //RPC请求返回, 返回值在$retval}有了这些, 我们就可以把一个Web应用中, 多个数据源并行处理, 从而也能把这些逻辑解耦, 分开部署…当然Yar目前还在试用阶段, 所以还没有发布任何一个包(Yar at PECL), 但是有兴趣的同学可以现在就把代码clone下去试用哦(虽然没有正式投入试用, 不过已经经过了验证).Yar: Yar at GithubPS, 如果要使用Msgpack(一个高效的二进制打包协议)做为打包协议, 需要单独安装Msgpack扩展(Msgpack), 这个扩展目前也是我在维护, 我会在近几天把他在PECL上发布, 尽请期待.
2023年08月08日
11 阅读
0 评论
0 点赞
2023-08-08
20个国外最优秀的PHP框架
每一个开发者都知道,拥有一个强大的框架可以让开发工作变得更加快捷、安全和有效。在开发项目之前选择一款合适的框架可以为今后奠定厚实的基础,下面这20个PHP框架你可以有选择的使用,一定会帮助到你的。1、LaravelLaravel是一款免费并且开源的PHP应用框架,它是为开发基于MVC的WEB应用而设计的,个人觉得,Laravel是2014年最棒的PHP框架了,它可以帮助你创建一些很酷的WEB应用,而且可以轻松地使用权限验证、URL路由、Session以及缓存等功能。官方网站:http://laravel.com/2、PhalconPhalcon是运行速度最快的一个PHP框架,它的底层是用C实现的,但是上层提供一些PHP扩展,Phalcon作为一款PHP框架以高性能和低消耗著称。尽管它用C语言实现,但是我们并不需要使用C语言,你只要会PHP就可以使用它了。官方网站:http://phalconphp.com/en/3、SymfonySymfony是一款为Web项目准备的PHP框架,它可以帮助你加速创建和维护PHP应用。Symfony可以帮助你省去很多重复的编码工作,让你的工作重心转移到设计和控制上面来。Symfony是一款可重用的PHP组件,它是基于MIT协议的开源软件,很多CMS系统和论坛程序都是基于Symfony开发的,例如Drupal和phpBB。官方网站:http://symfony.com/4、YiiYii是一款快速、安全和专业的PHP框架,同时它也是一款开发WEB 2.0应用的高性能PHP框架,Yii的功能非常强大,内置以下功能:MVC、DAO/ActiveRecord、I18N、权限验证、缓存、安全控制、测试、数据访问对象等。官方网站:http://www.yiiframework.com/5、CodeIgniterCodeIgniter是一款非常敏捷的开源PHP框架,如果你要用PHP开发一个简单而优雅的工具包,那么CodeIgniter就非常合适。官方网站:https://ellislab.com/codeigniter6、CakePHPCakePHP是一款老牌的PHP框架,正因为它的优秀所以也列入了2014年最优秀的PHP框架中,现在稳定版本已经是V3.0了。CakePHP可以帮助你简单、快捷地创建PHP应用程序,并且你可以用很少的代码实现强大的功能。官方网站:http://cakephp.org/7、Aura如果你喜欢用简洁的代码创建应用程序,那么你可以选择使用Aura,Aura也有相当大的一部分用户,使用方法和CakePHP类似,Aura的主要目标是为PHP开发者提供一个高质量、可测试、标准化组件的框架。官方网站:http://auraphp.com/8、Zend Framework前些年我在大型的WEB项目中使用过Zend 1和Zend 2,作为顶尖的PHP框架,Zend确实比较好用,而且文档也和很丰富。我们可以利用Zend创建一些扩展性非常好的PHP应用。官方网站:http://framework.zend.com/9、KohanaKohana是一款敏捷但是功能强大的PHP框架,我们可以用Kohana快速地创建Web应用,因为它有丰富的组件,比如数据访问接口、代码分析、加密和验证等等。官方网站:http://kohanaframework.org/10、Slim frameworkSlim是一款轻量级的PHP框架,作为一个微框架,Slim可以让你简单地创建一些功能强大的应用程序和API接口。Slim有强大的路由功能、自定义视图模板、flash消息、AES-256加密的安全cookies、HTTP缓存、可自定义的日志、异常处理以及调试和简单的配置。官方网站:http://www.slimframework.com/11、Fuel PHPFuel PHP是一款简单、可扩展的PHP框架,基于其他框架的设计理念,Fuel已经是V2.0版本了,目前认识beta版本。Fuel全面支持HMVC,这也是Fuel架构的一部分。另外,Fuel强大的路由功能让你灵活地处理好控制器和视图之间的对应关系。官方网站:http://fuelphp.com/12、FlightFlight是一款扩展性很强的微型PHP框架,Flight可以让你快速创建REST风格的web应用,它需要PHP5.3以上的版本支持,当然Flight也是基于MIT协议开源的。官方网站:http://flightphp.com/13、Medoo我非常喜欢这个微型框架,Medoo是一款最轻量级的PHP框架,可以用它来加速我们的应用开发。它只有13KB的一个文件,学习和使用都非常简单,并且Medoo也是开源的。官方网站:http://medoo.in/14、PHPixiePHPixie是一款轻量级的PHP MVC框架,它非常小巧,而且文档也比较全面,我们只需要做尽可能的配置就可以了。官方网站:http://phpixie.com/15、Pop PHPPop是一款强劲和易学的PHP框架,并且提供很多详细的API接口及其文档,支持PHP5.3及其以上版本。现在,Pop PHP依然保持着轻量级的特点,尽管很多新特性在逐渐加入到Pop中,但它使用起来依然很方便。官方网站:http://www.popphp.org/16、Simple MVC FrameworkSimple MVC Framework的安装及其简单,代码结构也非常简单,很容易学习。我们只需要设置网站路径就可以成功安装它了。在Twitter和Facebook群中也有Simple MVC Framework的讨论区,它是轻量级的,小于1M的大小。官方网站:http://simplemvcframework.com/17、TYPO3 FlowTYPO3是由最大的PHP社区之一的TYPO3管理开发的,也是一个开源的PHP框架。官方网站:http://flow.typo3.org/home18、Nette很受欢迎的PHP开发工具,它的设计理念是尽可能地简单和安全,Nette已经为你考虑了你的网站安全,包括XSS攻击,Session劫持,Session篡改等安全问题。官方网站:http://nette.org/en/19、AgaviAgavi是基于PHP5的PHP MVC框架,它帮助开发者编写简洁的代码,扩展性也非常不错。官方网站:http://www.agavi.org/20、SilexSilex也是一款基于PHP5.3及其以上版本的微型PHP框架,Silex的API使用非常有意思,因为API足够简单明了,利用Pimple的服务,成为一款很棒的第三方扩展应用。
2023年08月08日
21 阅读
0 评论
0 点赞
1
2