我正在我当前的asp.net应用程序中使用AsyncHttpHandlers实现一颗彗星。根据我的实现,客户端最初在AsyncHttpHandler上向服务器(具有其用户ID)发送Notification Hook请求,并且在服务器端I维护用户ID(密钥)和IAynsResult(值)的全局(应用程序级别)字典。因此,当收到向用户发送通知的请求时,我只需从全局字典中选择匹配的IAsyncResult并将响应发送给客户端用户。
我担心的是,维护应用程序级别的Userid和IAsyncResult字典是一个好的设计吗?在高流量时,我觉得它会给服务器带来很大的负担。 有没有其他方法可以实现彗星。或者在高流量场景下实现彗星的好设计是什么。
答案 0 :(得分:1)
这取决于对服务器的请求数,IAsyncResult请求使用进程的ThreadPool
,它自动管理工作线程的数量。为这些线程分配一个任务,将它们运行完成,然后返回到ThreadPool以供重用。
ThreadPool用于.NET的其他方面,并提供有限个线程数。如果你过度使用它,你的任务可能会被阻止等待其他人完成!
所以基本上,在ASP.net上运行彗星服务器需要强大的硬件或在多个服务器上分发应用程序。
我建议HTML5 WebSocket,这是W3C API用于在HTML中实现套接字,并且更容易在ASP.net服务器上设置: