Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 无循环的长轮询_Ajax_Networking_Websocket_Long Polling - Fatal编程技术网

Ajax 无循环的长轮询

Ajax 无循环的长轮询,ajax,networking,websocket,long-polling,Ajax,Networking,Websocket,Long Polling,一般来说,我对计算机是新手,特别是对网络开发是新手 我的问题是关于长投票 使用HTTP 1.0保持连接活动的简单方法是让ajax调用不断循环 更复杂的方法是将循环移动到后端,让服务器脚本仅在必要时发送应答 这是更好的,因为它不会给网络带来太大的压力,但它仍然需要不必要的计算机操作,这些操作源于不断循环以检查条件 两者之间的唯一区别是循环发生的位置 然而,这两种方法似乎都很老套 如何建立连接并仅在新的状态更改在某处产生中断时执行操作 这就是所谓的“websockets”吗 毕竟,这似乎是最复杂的做

一般来说,我对计算机是新手,特别是对网络开发是新手

我的问题是关于长投票

使用HTTP 1.0保持连接活动的简单方法是让ajax调用不断循环

更复杂的方法是将循环移动到后端,让服务器脚本仅在必要时发送应答

这是更好的,因为它不会给网络带来太大的压力,但它仍然需要不必要的计算机操作,这些操作源于不断循环以检查条件

两者之间的唯一区别是循环发生的位置

然而,这两种方法似乎都很老套

如何建立连接并仅在新的状态更改在某处产生中断时执行操作

这就是所谓的“websockets”吗

毕竟,这似乎是最复杂的做事方式,类似于电话系统


谢谢。

如果您只想使用js,您可以使用以下内容:

问题是您必须每次打开连接,除非您可以在服务器端保持连接打开:

(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>

变量套接字=io.connect(“http://localhost");
socket.on('something',函数(数据){
//处理数据
emit('somethingelse',{my:'data'});
});

从您的问题中,我了解到在这种情况下,可能会对AJAX长拉以及服务器与客户端的功能产生一些混淆

让我们从头开始。与Websocket连接和某些HTTP流技术不同,HTTP连接在客户端(浏览器)完成数据下载后关闭

只有客户端(浏览器)可以启动与服务器的网络连接。服务器无法启动连接

这一安排提出了两个问题:

  • 网络连接关闭后,服务器无法联系客户端并“推送”新数据

  • 这会导致网络减速,因为网络连接的一个重要特性称为“慢速启动”

  • AJAX试图通过打开新连接和“拉”数据来解决第一个问题(更新旧数据)

    每隔一段时间,浏览器就会创建一个新的连接,询问服务器“怎么了?”。如果存在新数据,服务器将使用新数据进行应答。否则,服务器回答“无新内容”

    把AJAX想象成服务器唠叨的妻子。“循环”是使用浏览器上的JavaScript完成的,浏览器是唯一可以打开新连接的浏览器(因此服务器不使用后台进程)

    另一方面,WebSocket和HTTP/2通过尝试避免重复的“慢启动”(重新使用相同的连接意味着连接已经运行得更快)并允许服务器“推送”数据(消除多余的流量),解决了网络应用程序性能问题

    当您使用Websockets时,服务器负责将新数据推送到客户端,而客户端(浏览器)则负责在连接丢失时重新连接到服务器(这可能而且可能通常应该发生,以确保网络随时可操作)

    服务器需要跟踪连接并将正确的数据发送到正确的客户端

    这允许以牺牲服务器资源和程序员的工作时间为代价,实现更高的性能和更好地利用网络资源。在我看来,这笔交易是值得的。Websockets是惊人的,与HTTP/2一起,它们应该可以帮助我们创造惊人的东西和卓越的用户体验

    对于客户端(浏览器)使用的不同JavaScript代码的示例,您可以阅读Rony的答案