【问题标题】:WCF comet and threadsWCF 彗星和线程
【发布时间】: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


    【解决方案1】:

    查看nComet

    它没有使用 WCF,但我相信作者正在开发一个使用 WCF 的版本。通过 codeplex 联系他并询问他:-)

    "nComet 是一个 .NET 实现 Comet(反向 AJAX 推送) 建筑学。这个服务器端 管道使用长寿命 客户端发起的 HTTP 连接到 向客户端推送消息。一旦 客户端收到响应,它 立即打开另一个 HTTP 请求,服务器一直保留到 一条消息准备好了。这种架构 允许服务器推送动态 html/xml/json/etc 到浏览器, 而不是浏览器轮询 服务器。

    这个项目的范围是 .NET 服务器端架构,最初 提供一个 HttpListener(用于自定义 与 HTTP.SYS 通信的主机 直接)以及一个 ASP.NET 实现,其中 ASP.NET 实现可以托管在里面 IIS 以及一个外部进程。 该库将简化 公共消息的实现 推送最新等模式 数据,以及同步。示例代码 并链接到多个客户端 javascript实现也将 提供。”

    【讨论】:

      【解决方案2】:

      您可能还想查看WebSync,这是一个 .NET comet 实现。与 WCF 配合得天衣无缝。

      (免责声明:我为公司工作)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多