完成上述步骤后,就可以进行安装HTTPSQS了。最后只需要启动HTTPSQS服务进程即可。因为HTTPSQS队列为空,所以返回结果为HTTPSQS_ERROR。检查HTTPSQS是否已经成功运行,可以查看是否存在主进程,如以下代码所示。......
2023-11-04
熟悉Web开发的读者经过前面介绍的HTTPSQS测试,相信已经了解了怎样在PHP中提交数据入队。PHP本身内置的file_get_content或者CURL函数都可轻松实现HTTPSQS数据入队。在应用程序层面,主要涉及入队,数据出队通常情况下不需要程序获取,因为消息队列的本质就是自动提交数据,如果使用程序来获取消息队列中的数据,那就没有使用消息队列的必要。接下来将介绍在MVC中入队数据,然后再介绍利用脚本功能实现消息队列自动出队。
1.入队
HTTPSQS入队使用的是HTTP提交,PHP内置了许多HTTP功能函数,方便开发人员选择。同时,HTTPSQS还提供了多种语言的类库,用于实现HTTPSQS入队及出队的所有操作,由于目前还没有介绍ThinkPHP扩展,所以这里不使用作者提供的类库,而是使用PHP内置的CURL函数。为了便于开发,只需要对CURL进行简单地封装即可,如以下代码所示。
只需要将上述函数写到Common/common.php自定义函数库中,即可在控制器动作中调用。这里将使用HTTPSQS处理日志信息,如以下代码所示。
通过前面的步骤,一个简单的消息队列日志系统就完成了。使用这种方式来保存日志,系统不仅运行得更加高效,而且数据更加完整。读者可以在浏览器中查看队列是否成功,如以下代码所示。
接下来就可以在出队中将日志记录保存到tpk_log数据表,实现永久保存。
2.出队
要使用入队后的数据就需要将数据出队。例如将日志记录保存,方便网站后台人员查阅,就需要创建存放日志的数据表,并且在控制器动作中创建相应的提交动作。这里将把保存日志的数据表命名为tpk_log,结构如图8-7所示。
图8-7 tpk_log数据表结构(www.chuimin.cn)
然后在Index控制器中创建提交动作,并命名为SaveLog。代码如下所示。
至此,保存日志所需要的步骤就完成了,接下来就需要将HTTPSQS中的队列数据发送给SaveLog动作。前面已经提到过,HTTPSQS本身没有自动提交数据(出队)的功能,需要开发人员自行编写监控脚本。在Linux系统中,可以使用官方提供的C语言接口,完成数据的检索和提交,C语言接口下载地址为http://code.google.com/p/httpsqs/source/browse/trunk/client/c。
对于只熟悉PHP的开发人员而言,同样也提供了PHP监控脚本,前提是监控服务器上已经安装了PHP解释器。这里假设PHP安装路径为/usr/local/php,那么PHP的解释器路径就为/usr/local/php/bin/php。下面将使用PHP解释器实现一个简单的HTTPSQS监控脚本。PHP类库下载地址为http://code.google.com/p/httpsqs/source/browse/trunk/client/php/httpsqs_client.php。
将下载后的httpsqs_client.php文件保存到监控服务器的/opt/php_shell目录中,然后使用vi等编辑器创建一个监控脚本,并命名为httpsqs.php,代码如下所示。
最后只需要将httpsqs.php脚本推送到后台运行即可。如以下代码所示。
至此,一个简单的消息队列日志系统就完成了。通过消息队列提交数据,虽然麻烦,但带来的性能提升是明显的。这里只是做一个简单的日志系统,事实上HTTPSQS支持大数据,能够使用在任何需要异步处理的场合,在实际应用开发中可根据需要进行选择。
需要说明的是,虽然消息队列能够提升性能,但是由于使用的是异步处理,所有数据都是按先入先出的排序方式进行出队的。所以消息队列中的数据始终是有延迟的,如果需要即时性的结果,就不太适合使用消息队列机制了。
有关PHP MVC开发实战的文章
完成上述步骤后,就可以进行安装HTTPSQS了。最后只需要启动HTTPSQS服务进程即可。因为HTTPSQS队列为空,所以返回结果为HTTPSQS_ERROR。检查HTTPSQS是否已经成功运行,可以查看是否存在主进程,如以下代码所示。......
2023-11-04
首先需要使用content方法连接上Memcached服务器,代码如下所示。接下来将继续使用Memcache成员方法对缓存数据库进行操作。stats cachedump:显示slabs指定范围内的缓存项,例如stats cachedump 0,3。......
2023-11-04
接下来将使用CodeIgniter实现一个简单的新闻列表,用户点击列表中的新闻标题将会进入新闻的正文页面,通过该例子演示CodeIgniter实现MVC开发的流程。在CodeIgniter中,控制器命名规则比较灵活,它不需要加前缀或后缀,一个普通的文件即可。......
2023-11-04
Json能够应用在许多场合,包括PHP本身就提供了对Json的反序列化操作。事实上,Json在传送大量数据时本身是存在溢出的,所以在设计时服务端要尽量避免输出大量Json数据。要达到前后台分离设计,使用Json通信最好不过了,因为主流的UI设计框架都对Json提供了完善的支持,下面将以Jquery为基础,详细介绍Ajax与Json的开发过程。由于使用Jsonp进行异步获取数据,所以Ajax异步通信变得简单。......
2023-11-04
ThinkPHP的模板引擎高效之处在于灵活的视图标签,熟悉这些标签的使用方式将能够提高视图模板的设计水平。接下来将从基本的创建视图开始,然后深入介绍默认视图引擎的使用。创建一个视图可分为以下几个步骤。需要注意的是,使用默认的{$}边界符,在视图模板中使用JavaScript等脚本时,有可能造成冲突。ThinkPHP内置了多种视图引擎,在默认情况下系统会使用内置的视图引擎,如果使用第三方的视图引擎,变量的分配方式会有所不同。......
2023-11-04
在数据库开发中,查询和插入数据是同等重要的,ThinkPHP对数据的插入、更新等都做了高度封装,系统提供create方法,用于创建数据对象。图7-2 create创建数据流程2.create数据操作前面介绍了create方法的运行过程,读者只需要理解即可,在实际应用开发中创建数据的过程是极其简单的。下面将结合示例代码,介绍create方法的实际应用,加深对create方法的认识。一切完成后,此时数据对象存放于内存中,使用add方法进行提交,完成整个create创建数据的过程。......
2023-11-04
图6-4 网站布局ThinkPHP 3.0之前的模板引擎没有布局的概念,但开发人员可以使用include包含文件达到网站布局的效果。布局文件允许嵌套,如果网站页面更加复杂,还可以结合include等标签实现开发需求。另外,如果不需要全局布局,也可以单独在当前页面中使用布局文件,只需要在当前页面头部加上
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
相关推荐