如果您使用 Web 服务,传输控制协议 (TCP/IP)将在一定程度上充当队列。
TCP 提供从一台计算机上的一个程序到另一台计算机上的另一个程序的可靠、有序的字节流传递。
这保证了如果客户端发送数据包 A,B,然后 C,服务器将按以下顺序接收它:A,B,然后 C。如果您必须以与请求相同的顺序回复客户端,那么您可能需要一个队列。
默认情况下,最大 ASP.NET 工作线程设置为每个 CPU 核心 12 个线程。所以在双核机器上,一次可以运行 24 个连接。根据计算需要多长时间以及“大量流量”的含义,您可以尝试不同的策略。
最简单的一种是使用 serviceTimeouts 和 serviceThrottling,只处理你能处理的,拒绝你不能处理的。
如果这不是一个选项,请增加硬件。这是第二个选项。
最后,您可以使服务完全异步。实现两种方法
string PostCalc(...)
和double GetCalc(string id)
. PostCalc
接受参数,将它们填充到队列(或数据库)中并立即返回 GUID(我喜欢使用string
而不是Guid
)。客户端可以将返回的 GUID 用作索赔票,GetCalc(string id)
每隔几秒调用一次,如果计算尚未完成,您可以返回 404 进行 REST。现在必须由监控队列的单独进程来完成计算。
第三个选项是最复杂的,但结果与第一个选项相似,即对传入请求设置上限。