SignalR集线器是否自主?

时间:2014-05-07 00:17:07

标签: c# asp.net-mvc multithreading signalr

我正在开发一个项目,其中SignalR集线器启动了12个短期运行的线程(新的Thread())。每个线程在完成时使用websockets向客户端报告。线程不是CPU密集型的,而是从其他Web服务获取一些信息。

现在我的困境是这样的:我应该创建一个作为服务运行的独立自托管signalR集线器应用程序,还是应该在我的asp.net MVC项目中包含集线器?

最佳表现是什么?

2 个答案:

答案 0 :(得分:2)

在.net 4.5以后执行此操作的正确方法是执行 单线程异步

ASP.Net should NEVER be creating new threads。在使用ASP.Net明确使用线程时,会产生巨大的性能影响。

此外,您应该知道线程是有限CPU资源的抽象(您通过声明您的线程不是CPU密集型而注意到这一点)。在.net 4.5以后,这应该告诉你不应该使用线程。 Instead, in this case you should be using a threadless I/O api to call your webservices.我建议你使用TAP(又名async await)模式,基本上是.net 4.5。

这应该允许您使用中等强大的计算机扩展到数千个并发请求。

如果使用TAP完成所有这些工作,ASP.Net MVC / IIS将在大规模并行化和“线程化”方面发挥出色。在这种情况下,我 建议高度反对使用Windows服务 ,因为您将使用IIS作为引导程序具有更好的稳定性(处理生命周期,并在服务终止时重新启动服务)

答案 1 :(得分:1)

如果性能是一个问题,我会使用线程池,而不是新的线程。

我将托管一个Windows服务,因为这会让我在分配给线程的资源方面有更多的控制权。