【发布时间】:2010-11-01 13:02:24
【问题描述】:
我正在尝试使用 WCF 实现彗星式服务器推送到 ajax Web 应用程序。
在我的 WCF 服务中,我实现了一个 WaitForEvents 方法,该方法调用 Monitor.Wait 来暂停线程,直到新数据到达。此时,Monitor 被脉冲,该方法返回关闭彗星样式请求的新数据。
发生这种情况时会再次发出请求。
目前,这工作正常,但我注意到 WCF 需要为每个连接的用户创建一个新线程。这可能是因为线程在数据进来之前无法返回到线程池,因此每个连接的用户都需要一个新线程。
我想通过让一个线程服务多个连接来提高这个实现的效率。如果我要使用套接字,这可以通过保持套接字打开并首先将线程返回到线程池来完成。当有新数据到达时,由另一个线程传递,我们可以直接将新数据写入socket并关闭它。
有人知道如何通过 WCF 做到这一点吗?
我一直在研究“推式流”http://msdn.microsoft.com/en-us/library/bb472551.aspx,他们提到“WCF 实现了一个“拉”模型,其中应用程序代码(服务)返回一个 Stream 实例并依赖于较低级别基础设施从该流中提取数据并将其写入网络。”但我在网站上找不到这方面的任何例子。
非常感谢!
【问题讨论】:
标签: c# multithreading comet performance