SignalR行为:阻止长轮询

No1*_*ver 1 c# asp.net-mvc signalr signalr-hub signalr.client

我想知道在我的网络应用程序中使用SignalR(c#,mvc).

场景:我的用户给我输入并处理它并向他们显示结果.这种处理可能很长.多久?让我们说3分钟(取决于网络流量,使用情况,...... - 无法预测).目前,我在AJAX请求中执行此过程进行长轮询.当AJAX运行时,我在屏幕上显示:"Please wait".

现在我在这个场景中添加了一个新的服务器限制:由于我正在使用CloudFlare,他们限制我每个请求必须花费不到100秒.否则,他们中止请求.

所以,我就是这样,并决定检查进入SignalR的选项.为什么?因为SignalR可以为我管理这个长时间的轮询.并且大多使用另一种方法(如套接字或其他技术),这可能会避免这种100秒的服务器限制.

我正在阅读SignalR网站,他们正在检查客户端功能并决定使用哪种技术.

我担心:由于CloudFlare将请求\响应限制为100秒,这可能会对SignalR造成问题.假设我的客户端是客户端,没有任何新的Web功能(如WebSocket或其他).这可能导致SignalR进行长轮询 - 这可能会失败.

是否可以定义SignalR以避免长轮询?或者您如何建议避免这种有问题的情况.

hal*_*r73 5

SignalR允许您配置服务器保持长轮询请求打开的最长时间.

默认情况下,SignalR服务器将关闭已打开110秒而未接收消息的轮询请求.当然,如果在110秒之前将消息发送到客户端,则在发送消息时将关闭轮询请求.在这两种情况下,当服务器关闭先前的轮询时,SignalR客户端将重新开始(否则我不会长时间轮询).

您可以使用以下命令在应用程序启动期间降低默认超时110秒IConfigurationManager.ConnectionTimeout:

// Make long polling connections wait a maximum of 60 seconds for a
// response. When that time expires, trigger a timeout command and
// make the client reconnect.
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(60);
Run Code Online (Sandbox Code Playgroud)

http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events#connectiontimeout