我对计算机很陌生,特别是对Web开发非常陌生。
我的问题是关于长轮询。
使用HTTP 1.0保持连接活动的简单方法是让ajax调用一遍又一遍地循环。
更复杂的方法是将循环移动到后端,并让服务器脚本仅在必要时发送答案。
这更好,因为它不会给网络带来太多压力,但它仍然需要不必要的计算机操作,这些操作源于不断循环以检查条件。
两者之间的唯一区别是循环发生的地方。
但是,两者看起来都很丑陋。如何建立连接并仅在新的状态更改在某处创建中断时才执行操作?
我这叫什么'websockets'?
毕竟,这似乎是最复杂的做事方式,类似于电话系统。
感谢。
答案 0 :(得分:0)
如果您只想使用js,可以使用以下内容:
Catch是你必须每次都打开连接,除非你可以在服务器端打开你的连接:
(function poll(){
setTimeout(function(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
//Setup the next poll recursively
poll();
}, dataType: "json"});
}, 30000);
})();
使用websocket,您可以实现相同的功能,如下所示:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect("http://localhost");
socket.on('something', function (data) {
//do something with data
socket.emit('somethingelse', { my: 'data' });
});
</script>
答案 1 :(得分:0)
从您的问题中我了解到,在这种情况下,AJAX长时间拉动以及服务器与客户端的功能可能存在一些混淆。
让我们从头开始吧。与Websocket连接和一些HTTP流技术不同,当客户端(浏览器)完成数据下载时,HTTP连接关闭。
只有客户端(浏览器)可以启动与服务器的网络连接。服务器无法启动连接。
这种安排提出了两个问题:
服务器无法联系客户端&#34; push&#34;网络连接关闭后的新数据。
由于网络连接的一个重要特征叫做“慢启动”,这会导致网络速度下降。
AJAX尝试通过打开新连接来解决第一个问题(更新旧数据),并且&#34;拉动&#34;数据
每隔一段时间,浏览器就会创建一个新的连接,询问服务器&#34;是什么?&#34;。如果存在新数据,则服务器将使用新数据进行应答。否则,服务器回答&#34;没什么新的&#34;。
将AJAX视为服务器唠叨的妻子。 &#34;循环&#34;在浏览器上使用JavaScript完成,这是唯一可以打开新连接的人(因此服务器没有使用后台进程)。
另一方面,Websockets和HTTP / 2通过尝试避免重复的&#34;慢启动来解决网络应用程序性能问题。 (重新使用相同的连接意味着连接已经运行得更快)并允许服务器“推送”#34;数据(消除过多的流量)。当您使用Websockets时,服务器有责任将新数据推送到客户端,并且客户端(浏览器)有责任重新连接到服务器,如果是连接丢失(可能并且可能通常应该发生以确保网络不时的可操作性)。
服务器需要跟踪连接并将正确的数据发送到正确的客户端。
这样可以牺牲服务器资源和程序员的工作时间,提高性能并更好地利用网络资源。在我看来,这笔交易非常值得。 Websockets是惊人的,与HTTP / 2一起,它们应该帮助我们创造出惊人的东西和卓越的用户体验。
有关客户端(浏览器)使用的不同JavaScript代码的示例,您可以阅读Rony的答案。