【发布时间】:2016-05-18 16:41:55
【问题描述】:
我的操作只返回带有信息的 JSON 字符串。
为了防止用户编辑每 2 秒更新一次信息的 JS 代码,我还需要一个服务器端延迟以防止高 CPU 负载。
如果有(例如)2000-5000 个用户同时执行相同的请求,使用Task.Delay(2000) 有多安全?每个用户返回的信息都不同。
【问题讨论】:
-
我不完全明白你想要达到什么目的,但是为什么不使用某种队列并通过计时器执行操作呢?
-
@KonstantinPeshekhonov IIS 已经使用队列,支持限制和结果缓存。没有必要重新发明它们
-
@AlekPsk 您所描述的不是高请求负载。 HTTP、IIS 和 ASP.NET 都有处理缓存响应的方法。您可以对单个用户响应使用输出缓存,例如使用 2 秒的小超时。您可以指定适当的标头,以便 IIS 本身在适当时返回缓存响应(例如 ETag、Expires)。您可以修改您的客户端,使其仅请求更新带有
If-Modified-Since标头或If-None-Match和最后一个 ETag 的版本 -
您还应该考虑在发生更改时使用 SignalR 将更改推送到客户端,而不是让客户端轮询服务器以获取更改。 SignalR 将为每个客户端使用最佳的可用通知机制(例如,WebSockets、无限帧、长轮询)。即使在最坏的情况下,它也比手写相同的代码更具可扩展性
标签: c# asp.net async-await