我正在寻找一个简单的(即,不是一个需要我设置一个单独的服务器来处理消息队列)的方法来对运行计算并生成图形的小型Web界面进行长轮询.这就是我的web界面需要做的事情:
由于计算都在服务器端完成,我不确定如何轻松设置它.显然,我想设置一个REST API来处理轮询,这在Flask中很容易.但是,我不确定如何检索实际更新.显而易见的是,虽然这个目的很复杂,但解决方案是设置消息传递队列并进行一些长轮询.但是,我不确定这对于这么简单的事情是否正确.
这是我的问题:
我有一种感觉,我过于复杂,因为我知道这种事情在网络上很常见.我经常看到发生的事情,并且在进行某些计算时会运行一些"loading.gif"图像(例如,在Google Analytics中).
谢谢你的帮助!
问题是SignalR JavaScript客户端在与服务器的连接丢失时如何检测?
谢谢你的回复!
有谁知道如何在ASP.NET MVC中编写长轮询AJAX请求(用于服务器PUSH通知)?每当我这样做时,似乎只有最后一个打开窗口的浏览器才会收到通知.好像IIS/ASP.NET正在取消最后一个请求,因为它已挂起或其他什么.
我的问题是我无法获得无限的流Retrofit
.在我获得初始poll()请求的凭证后 - 我做了初始poll()请求.如果没有更改,则每个poll()请求在25秒内响应,如果有任何更改,则每个poll()请求更早 - 返回changed_data [].每个响应都包含timestamp
下一个轮询请求所需的数据 - 我应该在每个poll()响应之后执行新的poll()请求.这是我的代码:
getServerApi().getLongPollServer()
.flatMap(longPollServer -> getLongPollServerApi(longPollServer.getServer()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollServer.getKey(), longPollServer.getTs(), "")
.take(1)
.flatMap(longPollEnvelope -> getLongPollServerApi(longPollServer.getServer()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollServer.getKey(), longPollEnvelope.getTs(), "")))
.retry()
.subscribe(longPollEnvelope1 -> {
processUpdates(longPollEnvelope1.getUpdates());
});
Run Code Online (Sandbox Code Playgroud)
我是RxJava的新手,也许我不明白,但我无法获得无限的流.我接到3个电话,然后是onNext和onComplete.
PS也许有更好的解决方案在Android上实现长轮询?
我们有一个使用SignalR作为其通知机制的Web应用程序.问题是当我们使用IE浏览我们的Web应用程序时,SignalR使用Long Polling作为其传输类型,因此将请求发送回我们的Web服务器,因此Session永远不会过期,无论多长时间浏览器空闲.
我们在想,也许我们可以在Global.asax中捕获请求并查看它们是否来自SingalR并将会话超时设置为剩余时间(我不认为这是一个简单的解决方案).
我们缺少其他任何解决方案吗?
我正在实现一个需要实时更新的系统.我一直在寻找某些场景,其中就是彗星.实现这一点,我认为这与传统的长轮询不同.
在这两种情况下,您都必须发送请求,然后服务器发回响应.在浏览器中解释响应,然后开始新请求.
那么为什么我要使用彗星,如果在这两种情况下我都需要打开和关闭连接.
我知道有办法伪造它,轮询(或长轮询),但有没有办法让服务器联系浏览器推出信息?
轮询选项会浪费服务器上的资源,并且取决于服务器可以将其锁定(例如apache和iis).
似乎很多网站都使用长轮询来伪造服务器端推送机制而不是http.将一个真正的推送协议内置到浏览器中不是更好吗?
哪些选项对服务器友好,可以将(虚假或其他)信息推送到Web浏览器?
嗯,这里有关于websockets的信息.技术本身是惊人的,这一点毫无疑问.在我开始在我的应用程序中使用它们之前,我只想让社区回答以下问题:
"...为了保持存在,应用程序可以在WebSocket上发送保持活动的消息,以防止它因空闲超时而被关闭......"
"...理想情况下,WebSocket的未来版本将支持超时发现,因此它可以告诉应用程序保持活动消息的时间......"
感觉就像似曾相识.之前我们不得不一次轮询服务器%period_time%以获取所需的更新信息.对于websockets,我们必须使用keep-alive消息在%period_time%上轮询websocket服务器,以确保Internet连接仍处于活动状态/ websocket服务器仍在工作.有什么好处?
关于这些保持活跃的消息还有另外一件事.Websocket协议的优点是使用比HTTP(S)更少的流量.如果我们发送保持活跃的消息,似乎流量优势消失了.或者可能不是?
如果我使用websockets,我应该如何处理我的应用程序中的互联网丢失?我的意思是当互联网连接突然丢失时的真实情况(我的意思是没有发生"navigator.offline"事件).我应该使用某种setTimeout函数来查找保持活动消息,还是有更好的方法来处理这种情况?
REST让我们清楚地了解应用程序应该如何工作以及请求应该如何.在websocket驱动的应用程序中执行此操作的最佳方法是什么?我应该用request.action字段(例如)JSON编码的消息吗?应用程序应该如何执行PUT请求?REST模型中有URL资源来处理这个问题,所以我应该使用这些方法的组合,还是可以简化?
我有Nginx 1.4.4和PHP 5.5.6.我正在进行长轮询请求.问题是,如果我取消通过Ajax发送的HTTP请求,请求仍在处理(它们不会停止).我在文件末尾用PHP mail()函数测试了它,而邮件仍然没有停止文件).
我很担心,因为我认为它可能导致服务器崩溃,因为未关闭的请求负载很高.是的,我试过ignore_user_abort(false);
但没有变化.有可能我应该在Nginx中改变一些东西吗?
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)