还有另一种技术可以将消息从服务器发送到客户端。为此,您必须使用 iframe 连接到不会关闭连接的 PHP 脚本(或您在服务器端使用的任何技术)。然后,每当必须通知客户端某事时,PHP 脚本就会发送 JavaScript 消息。在每条消息之后,服务器刷新输出流以强制数据真正找到到达客户端的方式并且不被某些输出缓冲区缓存。下面是在 iframe 中加载的 PHP 脚本的一个小示例代码(未经测试且不完整,只是为了展示基础知识):
<html>
<body>
<script type="text/javascript">
function receiveMsg(data)
{
// Do something with the data, for example send it to some function
// in the parent frame (Where your chat application lives)
}
<?php
while (true) // You may also implement some abort state which should
// be checked here
{
$data = waitForData(); // This is your magic function on the server
// which waits for data to be send to the client
echo "receiveMsg('" . $data . "');"; // Let's say data is just a string.
// You may want to use JSON instead
flush();
}
?>
</script>
</body>
</html>
这种方法的优点是它不依赖轮询。因此,您不必每 x 秒向服务器发送一次请求。当你在服务器端做正确的事情时,一个用户发送的消息会尽快被其他用户接收,而不是 x 秒后。缺点是每个聊天用户都有一个永久的 HTTP 连接。但这可能需要更少的服务器资源,然后每个聊天用户每分钟有几十个完整的 HTTP 请求。