微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – AJAX监听器而不是轮询?

我在python中创建了自己的聊天网络服务器,想知道而不是AJAX每秒都调用一次服务器(下面的JS).我可以修改我的服务器,所以当它更新chat.html文件时,它会将其推送给所有客户端.有没有办法使用javascript让它听取任何收到的数据而不是轮询?

<script>
// Request the AJAX update the chat window every second
setInterval(function(){loadChat()},1000);

function loadChat()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("chatwindow").innerHTML=xmlhttp.responseText;
            }
        }

        xmlhttp.open("GET","chat.html",true);
        xmlhttp.send(null);
    }
}
</script>

解决方法:

是的,当然有.您可以使用(至少)四种技术:

> WebSockets.这是最明显的解决方案.它允许您按需发送和接收消息,而无需轮询.但是,在服务器端实现它可能有点困难,因为它不是普通的HTTP.此外,旧浏览器不支持WebSockets.
>服务器发送的事件.这不太令人满意,但仍然适合您.有了它,您可以从服务器接收消息而无需轮询.它也更容易在服务器上实现,因为它只是普通的HTTP,除了连接没有关闭.它也不支持某些较旧的Web浏览器,但它比WebSockets更受支持,并且非常容易填充.
> COMET.这基本上是对以下内容的改进.基本上,你有一个隐藏在屏幕外的iframe.每当有事件发生时,您发送(并刷新!)脚本标记,但不要关闭连接.超时后,关闭连接.然后刷新iframe.这也很容易实现,是纯HTTP,不需要特殊的浏览器支持.但是,浏览器超时有所不同,这有点不太优雅.
>保持连接打开直到事件发生.这可能是最不可取的.只是在事件发生之前不发送响应.当事件进入或发生超时时,发送响应.当客户端收到响应时,重新连接.这也有些不雅,但它确实有效.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐