长轮询是一种技术,允许 Web 应用程序有效地等待来自服务器的新数据,而无需不断刷新页面。这对于不经常更新数据的应用程序特别有用,例如聊天或社交网络应用程序。
在 PHP 和 JavaScript 中实现基本长轮询
虽然长轮询可以看似复杂,其实现却出奇的简单。让我们来看一个使用 PHP 和 JavaScript 的基本示例:
PHP 脚本 (msgsrv.php)
<?php if (rand(1, 3) == 1) { header("HTTP/1.0 404 Not Found"); die(); } sleep(rand(2, 10)); echo("Hi! Have a random number: " . rand(1, 10)); ?>
此脚本模拟一个简单的消息服务器。它生成一个随机数并将其作为响应发送,并有 2 到 10 秒之间的随机延迟来模拟现实世界的条件。
JavaScript 代码 (long_poller.htm)
<html> <head> <script src="jquery.min.js"></script> <script> function addmsg(type, msg) { $("#messages").append("<div class='msg " + type + "'>" + msg + "</div>"); } function waitForMsg() { $.ajax({ url: "msgsrv.php", success: function (data) { addmsg("new", data); setTimeout(waitForMsg, 1000); }, error: function () { addmsg("error", "Error"); setTimeout(waitForMsg, 15000); } }); } $(document).ready(function () { waitForMsg(); }); </script> </head> <body> <div>
此 JavaScript 代码使用 jQuery 异步请求 PHP 脚本。如果请求成功,它将响应添加到#messages div。如果请求失败,则会显示错误并在 15 秒后重试。 setTimeout 函数确保浏览器定期请求脚本,从而实现长轮询。
说明
此示例演示了长轮询的简化实现。 PHP 脚本模拟一个不定期发送数据的服务器。 JavaScript 代码使用 AJAX 重复请求脚本,等待响应。收到响应后,JavaScript 代码会更新 UI。如果没有响应,脚本会等待一小段时间并重试。这种方法允许 Web 应用程序保持响应,同时有效地等待服务器端更新。
以上是长轮询如何在不不断刷新页面的情况下高效更新Web应用?的详细内容。更多信息请关注PHP中文网其他相关文章!