实现简单的长轮询
许多资源描述了长轮询的概念,但实际的实现示例仍然难以捉摸。让我们深入研究一个简化版本,不依赖复杂的框架或服务器配置。
使用 Apache 和 PHP 进行服务器通信
要处理服务器请求,Apache 就足够了。下面的 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)); ?>
用于长轮询的 JavaScript 客户端
在 JavaScript 中,长轮询器不断请求上述脚本并等待响应:
<script type="text/javascript"> function waitForMsg() { $.ajax({ type: "GET", url: "msgsrv.php", success: function(data) { // Display the message $("#messages").append("<div class='msg new'>" + data + "</div>"); // Recursively invoke waitForMsg setTimeout(waitForMsg, 1000); }, error: function() { // Display the error message and restart the process after 15 seconds $("#messages").append("<div class='msg error'>Error encountered</div>"); setTimeout(waitForMsg, 15000); } }); } $(document).ready(function() { waitForMsg(); }); </script>
此脚本不断检查服务器更新并显示传入消息。合并了错误处理,长轮询器会在指定的超时时间后尝试重新连接。
长轮询的优点
长轮询有几个好处:
以上是如何使用 Apache 和 PHP 实现简单的长轮询?的详细内容。更多信息请关注PHP中文网其他相关文章!