8 c# performance multithreading comet
我正在尝试使用WCF实现彗星式服务器推送到ajax Web应用程序.
在我的WCF服务中,我实现了一个WaitForEvents方法,该方法调用Monitor.Wait来挂起线程,直到新数据到达.此时,监视器发出脉冲,并且该方法返回关闭彗星样式请求的新数据.
发生这种情况时会再次发出请求.
目前,这工作正常,但我注意到WCF需要为每个连接的用户创建一个新线程.这可能是因为在数据进入之前线程无法返回到线程池,因此每个连接的用户都需要一个新线程.
我想通过让一个线程服务多个连接来使这个实现更有效.如果我要使用套接字,可以通过保持套接字打开并首先将线程返回到线程池来完成.当新数据到达时,它将由另一个线程传递,我们可以将新数据直接写入套接字并关闭它.
有谁知道如何通过WCF完成这项工作?
我一直在看"Push-Style Streaming" http://msdn.microsoft.com/en-us/library/bb472551.aspx,他们提到"WCF实现了一个"拉"模型,其中应用程序代码(该服务) )返回Stream的一个实例,并依赖于较低级别的基础架构从该流中提取数据并将其写入网络." 但是我找不到这个网站的任何例子.
提前谢谢了!
查看nComet
它没有使用 WCF,但我相信作者正在开发一个使用 WCF 的版本。通过 codeplex 联系他并询问他:-)
“nComet 是 Comet(反向 AJAX 推送)架构的 .NET 实现。这个服务器端管道使用客户端发起的长寿命 HTTP 连接将消息推送到客户端。一旦客户端收到响应,它会立即打开另一个HTTP 请求,服务器保留该请求直到消息准备好。这种架构允许服务器将动态 html/xml/json/etc 推送到浏览器,而不是浏览器轮询服务器。
该项目的范围为 .NET 服务器端架构,最初提供 HttpListener(用于直接与 HTTP.SYS 通信的自定义主机)以及 ASP.NET 实现,其中 ASP.NET 实现可以托管在 IIS 内,如下所示:以及外部过程。该库将简化常见消息模式的实现,例如推送最新数据以及同步。还将提供示例代码和多个客户端 JavaScript 实现的链接。”