首页 理论教育《PHPMVC开发实战》:MVC中使用HTTPSQS技巧

《PHPMVC开发实战》:MVC中使用HTTPSQS技巧

【摘要】:熟悉Web开发的读者经过前面介绍的HTTPSQS测试,相信已经了解了怎样在PHP中提交数据入队。同时,HTTPSQS还提供了多种语言的类库,用于实现HTTPSQS入队及出队的所有操作,由于目前还没有介绍ThinkPHP扩展,所以这里不使用作者提供的类库,而是使用PHP内置的CURL函数。这里将使用HTTPSQS处理日志信息,如以下代码所示。下面将使用PHP解释器实现一个简单的HTTPSQS监控脚本。

熟悉Web开发的读者经过前面介绍的HTTPSQS测试,相信已经了解了怎样在PHP中提交数据入队。PHP本身内置的file_get_content或者CURL函数都可轻松实现HTTPSQS数据入队。在应用程序层面,主要涉及入队,数据出队通常情况下不需要程序获取,因为消息队列的本质就是自动提交数据,如果使用程序来获取消息队列中的数据,那就没有使用消息队列的必要。接下来将介绍在MVC中入队数据,然后再介绍利用脚本功能实现消息队列自动出队。

1.入队

HTTPSQS入队使用的是HTTP提交,PHP内置了许多HTTP功能函数,方便开发人员选择。同时,HTTPSQS还提供了多种语言的类库,用于实现HTTPSQS入队及出队的所有操作,由于目前还没有介绍ThinkPHP扩展,所以这里不使用作者提供的类库,而是使用PHP内置的CURL函数。为了便于开发,只需要对CURL进行简单地封装即可,如以下代码所示。

978-7-111-42852-7-Part02-347.jpg

978-7-111-42852-7-Part02-348.jpg

只需要将上述函数写到Common/common.php自定义函数库中,即可在控制器动作中调用。这里将使用HTTPSQS处理日志信息,如以下代码所示。

978-7-111-42852-7-Part02-349.jpg

通过前面的步骤,一个简单的消息队列日志系统就完成了。使用这种方式来保存日志,系统不仅运行得更加高效,而且数据更加完整。读者可以在浏览器中查看队列是否成功,如以下代码所示。

978-7-111-42852-7-Part02-350.jpg

接下来就可以在出队中将日志记录保存到tpk_log数据表,实现永久保存。

2.出队

要使用入队后的数据就需要将数据出队。例如将日志记录保存,方便网站后台人员查阅,就需要创建存放日志的数据表,并且在控制器动作中创建相应的提交动作。这里将把保存日志的数据表命名为tpk_log,结构如图8-7所示。

978-7-111-42852-7-Part02-351.jpg

图8-7 tpk_log数据表结构(www.chuimin.cn)

然后在Index控制器中创建提交动作,并命名为SaveLog。代码如下所示。

978-7-111-42852-7-Part02-352.jpg

978-7-111-42852-7-Part02-353.jpg

至此,保存日志所需要的步骤就完成了,接下来就需要将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,代码如下所示。

978-7-111-42852-7-Part02-354.jpg

978-7-111-42852-7-Part02-355.jpg

最后只需要将httpsqs.php脚本推送到后台运行即可。如以下代码所示。

978-7-111-42852-7-Part02-356.jpg

至此,一个简单的消息队列日志系统就完成了。通过消息队列提交数据,虽然麻烦,但带来的性能提升是明显的。这里只是做一个简单的日志系统,事实上HTTPSQS支持大数据,能够使用在任何需要异步处理的场合,在实际应用开发中可根据需要进行选择。

需要说明的是,虽然消息队列能够提升性能,但是由于使用的是异步处理,所有数据都是按先入先出的排序方式进行出队的。所以消息队列中的数据始终是有延迟的,如果需要即时性的结果,就不太适合使用消息队列机制了。