1

我正在我当前的 asp.net 应用程序中使用 AsyncHttpHandlers 实现彗星。根据我的实现,客户端最初在 AsyncHttpHandler 上向服务器(及其用户 ID)发送通知挂钩请求,在服务器端,我维护用户 ID(键)和 IAynsResult(值)的全局(应用程序级别)字典。因此,当收到向用户发送通知的请求时,我只需从全局字典中选择匹配的 IAsyncResult 并将响应发送给客户端用户。

我担心的是,在应用程序级别维护用户 ID 和 IAsyncResult 的字典是一个好的设计吗?我觉得在高流量时它会给服务器带来很多负载。有没有其他方法可以实现彗星。或者在高流量场景中实现彗星的好的设计是什么。

4

1 回答 1

1

这取决于对服务器的请求数量,IAsyncResult 请求使用ThreadPool自动管理工作线程数量的进程。这些线程被分配一个任务,运行它们直到完成,然后返回到 ThreadPool 以供重用。

ThreadPool 由 .NET 的其他方面使用,并提供有限数量的线程。如果您过度使用它,您的任务可能会被阻止等待其他人完成!

所以基本上,在 ASP.net 上运行彗星服务器需要强大的硬件,或者需要在多个服务器上分发应用程序。

我会推荐HTML5 WebSocket,它是用于在 HTML 中实现套接字的W3C API,并且更容易在 ASP.net 服务器上设置:

.net 4 的 SignalR

.net 4.5 的 ASP.net WebSocket API

于 2012-04-06T07:37:14.537 回答