实现一个简单的服务端推送方案-实例篇Polling
来源:互联网 发布:breed mac修改 编辑:程序博客网 时间:2024/06/05 19:38
前面讲过一篇《实现一个简单的服务端推方案》,这里讲实现的实例。
这篇讲Polling,即浏览器客户端长轮循,后端PHP短轮循数据库,功能是从数据库表读取最新的记录并显示。
客户端代码,JS库为prototype.js:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><script language="JavaScript" type="text/javascript" src="./prototype.js"></script></head><body> <script language="JavaScript"> var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Comet = Class.create(); Comet.prototype = { maxvid: 0, url: './backend.php', noerror: true, initialize: function(){ }, connect: function(){ this.ajax = new Ajax.Request(this.url, { method: 'get', parameters: { 'maxvid': this.maxvid }, onSuccess: function(transport){ var response = transport.responseText.evalJSON(); this.comet.maxvid = response['vid']; this.comet.handleResponse(response); this.comet.noerror = true; }, onComplete: function(transport){ if (!this.comet.noerror) setTimeout(function(){ comet.connect() }, 5000); else this.comet.connect(); this.comet.noerror = false; } }); this.ajax.comet = this; }, handleResponse: function(response){ $('content').innerHTML += '<div>' + response['msg'] + '</div>'; } } var comet = new Comet(); comet.connect(); </script><div id="content"></div> </body></html>
服务器PHP代码:backend.php
<?phpheader("Cache-Control: no-cache, must-revalidate");header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");flush();//控制浏览器前端不要缓存结果,每次都要重新查询$maxvid = $_GET["maxvid"];error_log(date("[Y-m-d H:i:s]")." > "."maxvid: ".$maxvid."\n", 3 , "/usr/local/apache2219/logs/php_log");$dblnk = mysql_pconnect('192.168.2.162:3306', 'root', 'cpyf');mysql_select_db('app_m1p', $dblnk);if ( $maxvid <= 0 ) { $result = mysql_query("select max(vid) from vdooropen"); $result = mysql_fetch_row($result); $maxvid = $result[0];}while (1){ $result = mysql_query("select * from vdooropen where vid > $maxvid order by vid desc limit 1"); $num = mysql_num_rows($result); //echo $num; if ( $num > 0 ) break; usleep(10000); // sleep 10ms to unload the CPU}$result = mysql_fetch_row($result);// 返回 JSON 数组$response = array();$response['vid'] = $result[0];$response['msg'] = $result[0].",".$result[1].",".$result[2].",".$result[3].",".$result[4];$responseText = json_encode($response);error_log(date("[Y-m-d H:i:s]")." < ".$responseText."\n", 3 , "/usr/local/apache2219/logs/php_log");echo $responseText;flush();?>
- 实现一个简单的服务端推送方案-实例篇Polling
- 实现一个简单的服务端推送方案-实例篇Polling(服务端阻塞读)
- 实现一个简单的服务端推送方案-实例篇Polling(服务端阻塞读,SLEEP方式读MYSQL)
- 实现一个简单的服务端推送方案-实例篇Push
- 实现一个简单的服务端推送方案-实例篇Push
- 实现一个简单的服务端推送方案
- 实现一个简单的服务端推方案
- PHP服务端推送技术Long Polling
- PHP服务端推送技术Long Polling
- PHP服务端推送技术Long Polling
- PHP服务端推送技术Long Polling
- PHP服务端推送技术Long Polling
- iOS 推送的服务端实现
- WCF的简单实例(手写代码实现)--服务端
- Netty实例-简单的服务端-客户端实现,注释详细
- Socket实现客户端和服务端 简单的入门实例
- 实例:linux下实现简单的socket 客户端 服务端
- 一个简单的分布式锁实现方案
- Thrift基础知识汇总--------------(从官网资料中总结的)
- Machined Surfaces
- EventBus 使用介绍
- 屏幕旋转
- 在C#中实现Socket端口复用
- 实现一个简单的服务端推送方案-实例篇Polling
- 【ASO潜规则】之 应用商店AppStore关键字选取常见的一些错误
- 【记录】C语言int a 也会分配内存
- Java动态代理(JDK与CGLib)
- Windows下LDAP服务器配置
- FBI树
- 手机内存不够大的请进!!!让你的sd卡变成手机内存
- IOS视图切换实现简单动画
- TAF与负载均衡