标签: long-polling

ajax,长时间轮询和管理两分钟重试

对我的node.js服务器的一个AJAX请求有时可能需要两分多钟.我发现当服务器耗时超过两分钟时,客户端会重新发送AJAX请求.这导致服务器因为开始第二个昂贵的过程而陷入更加困难.

为了解决这个问题,我在服务器上实现了一个长轮询解决方案.客户端对服务器上的检查功能进行ajax调用,该功能仅检查进程是否完成并每五秒重新检查一次,并在完成后返回客户端.

但是,我仍然有两分钟问题的变化.两分钟后,第二次检查AJAX仍在通话.然后两个检查都在运行,似乎只有新的检查会与客户端进行通信.

解决这个问题的最佳方法是什么?

  • 有没有办法配置或禁用两分钟ajax重发?
  • 有没有更好的方法来管理后续的服务器重复请求?
  • 我是否需要在客户端而不是服务器上实现超时?

我正在使用jQuery AJAX调用,Chrome浏览器上的node.js服务器

更新:从node.js文档,"所有传入连接的默认超时为2分钟".我仍然对编写长时间运行的服务器请求的最佳实践建议感兴趣,其中客户端在服务器完成之前不需要知道任何事情.

ajax jquery long-polling node.js

3
推荐指数
1
解决办法
1629
查看次数

Javascript:每个客户端有两个连接?

我正在开发一个实现longpolling的应用程序,因为我希望用户在收到通知后立即收到通知.我有这个部分工作,但我还需要使用javascript函数扩展它,每20秒向服务器发送一次'heartbeat'.

我的问题:如何在不完全中断代码20秒的情况下执行此操作(以便其他javascript在计数时仍然执行)并且是否有某种方法可以使用第二个连接?因为当心跳发送给用户时,我不希望我的longpolling被中断.

有任何想法吗?

javascript ajax heartbeat long-polling multitasking

3
推荐指数
1
解决办法
711
查看次数

使用GWT Comet的气氛

我正在寻找一个简单的框架,用于为我的GWT应用程序实现Comet.我看了似乎不活跃的gwt-rocket,然后是没有活动的gwt-comet,然后是大气-gwt-comet,它被移动到大气项目中,最后 - 试图从大气中实际下载gwt样本和它一起工作.:|

我将atmosphere-gwt-server和atmosphere-gwt-client模块(版本0.8.6)添加到我的项目中,并尝试使现有的大气样本工作.我一直在获得连接终止的异常,而且没有消息.似乎这个例子没有发布任何内容,也没有说明如何做.

我找不到任何使用此框架的好JavaDoc或文档,也找不到任何其他有效的推荐框架.此外,我无法理解这个大气框架使用哪种Comet方法 - 长轮询或流式传输?对于我的应用程序,似乎长轮询就足够了,我不想进入我在流式传输方法上阅读的许多问题/不兼容性.

有人可以推荐一个简单的解决方案?样品?文档?

谢谢

java gwt comet long-polling

3
推荐指数
1
解决办法
3452
查看次数

在JS中停止长轮询功能

我有一个页面,我已经实现了一个长轮询功能来检查记录的时间戳,所以如果数据已被编辑它将更新.

<script type="text/javascript">
var poll_url = 'http://mysite.com/poll/;
var my_ts = <?php $_SESSION['template_timestamp']; ?>;
(function poll(){
    $.ajax({ 
        url: poll_url,
        type: 'post',
        success: function(data){
            if ((data.ts > 0) {
                // check if expired
                if (data.ts > my_ts) {
                    // it has expired, so reload the page
                    $("#dialog-message").html('Record has been edited.');
                    // show popup
                    $("#dialog-message").dialog({
                        modal: true,
                        buttons: {
                            Reload: function() {
                                $(this).dialog("close");
                                $('#pleaseWait').show();
                                window.location.href = '/records/overview';
                            }
                        }
                    });
                }
            } else {
                // is still null
                console.log('error');
            }
        }, 
        dataType: "json", …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery long-polling

3
推荐指数
1
解决办法
5497
查看次数

龙卷风-如何实现长轮询客户端

我正在尝试在Tornado中实现与远程Tornado服务器交互的长拉客户端。

发生的事情是两件事之一:

  1. 客户端超时,或者
  2. 客户端在完成整个后台过程后立即接收所有消息,类似于阻止消息

这是我使用的客户端:

from tornado import ioloop
from tornado import httpclient

print "\nNon-Blocking AsyncHTTPClient"
import tornado.ioloop

def async_call(response):
        if response.error:
                response.rethrow()
        print "AsyncHTTPClient Response"
        ioloop.IOLoop.instance().stop()

http_client = httpclient.AsyncHTTPClient()
http_client.fetch("http://localhost:9999/text/", async_call)
ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

这是编写长轮询/ comet客户端的正确方法吗?

对于那些愿意在Tornado中提供一个示例异步服务器的人,我也将不胜感激,因为可能是我在错误地编写了彗星的Tornado服务器……对于整个长轮询过程来说,我有点陌生。

python comet tornado long-polling

3
推荐指数
1
解决办法
7912
查看次数

网站远程控制

我想开始创建一个在手机(任何类型的智能手机)上打开的网站.该网站将具有控制您已在计算机上打开的网站的功能.(2011年的大众新世纪甲壳虫有这个功能,我可以在台式电脑上打开的网站上通过智能手机滚动)

我们有一个关于horsevideos的流媒体网站,如果他们可以通过智能电视观看流媒体并通过iphone/android/wp进行控制,这对我们的客户来说将是一个很棒的功能.

此外,来自瑞士的wilmaa.com为智能手机提供了一个遥控器,可以在我的智能电视/网络浏览器网站上导航.

因为我需要一个起点来了解它是如何工作的我正在检查谷歌,也许外面已经有任何遥控器,但不幸的是我找不到任何东西.

也许Stack Overflow可以帮助我提出一些如何实现这一点的起点.

server-push long-polling websocket

3
推荐指数
1
解决办法
2045
查看次数

编写angularJS轮询器

我正在尝试使用$ http在我的应用程序中为长轮询编写一个angularJS服务.

这是我的代码:

app.factory('Poller', function($http, $timeout){
    var poll = function(http, tick){
        http.then(function(r){
            $timeout(poll, tick);
            return r.data;
        });
    };

    return{
        poll: poll
    };
});
Run Code Online (Sandbox Code Playgroud)

基本的想法是每当我需要在$ http调用上进行轮询时注入此服务.我在控制器中使用它:

app.controller('myCtrl', function($scope, $http, Poller){
    $scope.polledVar = Poller.poll($http.get('api/getVar'), 1000);
});
Run Code Online (Sandbox Code Playgroud)

使用此代码时,我收到以下错误:

TypeError: Cannot call method 'then' of undefined
Run Code Online (Sandbox Code Playgroud)

long-polling angularjs

3
推荐指数
1
解决办法
1万
查看次数

SignalR:建立连接时是否可以强制连接在服务器端使用特定传输?

在使用SignalR开发服务器客户端推送机制时,我遇到了最大的并发连接问题.即每个浏览器进程仅支持大约6个到同一域的并发连接.

我目前正在跟踪哪些用户与哪些连接相关联,并且在用户有三个打开的​​连接后,我想强制来自同一用户的其他连接使用长轮询进行传输而不是Web套接字.通过这种方式,我希望避免完全耗尽连接的问题.

我总是可以在客户端上执行此操作,服务器提供非SignalR机制,以通知客户端是否已用完Web套接字连接,然后客户端可以在打开SignalR连接时指定长轮询,但这似乎效率低下.我真的想在连接打开时适当地设置传输.

类似于集线器类中的以下内容.

    /// <summary>
    /// Chooses the correct transport depending on a users connections
    /// </summary>        
    public override Task OnConnected()
    {
        if(CanOpenWebSocketsConnection(Context.User.Identity.Name))
        {
            Connection.Transport = Connections.WebSockets;
        }
        else
        {
            Connection.Transport = Connections.LongPolling;
        }
        return base.OnConnected();                
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc long-polling signalr

3
推荐指数
1
解决办法
6226
查看次数

在Spring + Sockjs应用程序上手动设置传输类型

我需要在非JEE7兼容服务器上安装应用程序.我正在使用Spring + Stomp + SocksJs进行实时通知.

我的代码看起来像这样:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry ser) {
        ser.addEndpoint("/notifications").withSockJS()
    }

   }

}
Run Code Online (Sandbox Code Playgroud)

在客户端:

function setSocket(broker, callbackFn) {

    var socket = {};

    socket.cliente = new SockJS(path + broker);
    socket.stomp = Stomp.over(socket.cliente);

    socket.stomp.connect({}, function () {
        socket.stomp.subscribe("/topic" + broker, callbackFn);
    });

}
Run Code Online (Sandbox Code Playgroud)

有没有办法手动设置使用的传输类型并避免使用websockets?

java spring long-polling sockjs spring-websocket

3
推荐指数
1
解决办法
4769
查看次数

AWS SQS长轮询不会减少空接收

目前,我有一个AWS SQS作为我的AWS Lambda函数的触发器。

我想实施长时间轮询以降低成本,因为我已经用完了每月免费套餐的70%,其中大部分来自空收据。

我尝试通过将queue属性更改为ReceiveMessageWaitTimeSeconds来设置长轮询20 seconds

SQS详细信息显示ReceiveMessageWaitTimeSeconds设置为20s

但是,这似乎并没有减少空接收的数量,在2:00-3:00之间的11/19更改了设置。 即使设置了长时间轮询,“空接收”图仍显示相同的趋势

根据AWS文档WaitTimeSeconds优先级高于队列属性ReceiveMessageWaitTimeSeconds

通过以下两种方式之一将ReceiveMessage请求的WaitTimeSeconds参数设置为0时,将发生短轮询:

  • ReceiveMessage调用将WaitTimeSeconds设置为0。
  • ReceiveMessage调用未设置WaitTimeSeconds,但是队列属性ReceiveMessageWaitTimeSeconds设置为0。

注意

对于ReceiveMessage操作的WaitTimeSeconds参数,在1到20之间设置的值优先于为队列属性ReceiveMessageWaitTimeSeconds设置的任何值。

由于AWS Lambda正在接收SQS请求,因此我认为WaitTimeSeconds无法对其进行配置。

为什么我的长轮询配置在这种情况下不起作用?我是误解了什么,还是配置错误?

谢谢!

amazon-sqs amazon-web-services long-polling aws-lambda

3
推荐指数
1
解决办法
841
查看次数