【问题标题】:Designing WCF server for low latency为低延迟设计 WCF 服务器
【发布时间】:2010-11-26 20:17:03
【问题描述】:

如何实现发布-订阅场景下WCF服务器的低延迟?具体来说,客户端订阅数据并接收更新,有问题的延迟是在数据更改和客户端接收更改之间? CPU、内存、带宽要求并不重要,可能很高。

基础很明显:二进制序列化、命名管道等。但是,例如,通过始终连接的流发送数据是否有意义?或者将批量更新作为单个消息发送以减少 RPC/标头开销?

可能有一些项目的代码或接口可用作示例?

【问题讨论】:

    标签: .net wcf networking latency


    【解决方案1】:

    你看过了吗

    http://geekswithblogs.net/BVeldhoen/archive/2008/01/26/wcf-latency-test-harness.aspx

    它考虑了各种绑定和数据大小。

    【讨论】:

      【解决方案2】:

      不是一个全面的解决方案,但是:为了减少与数据大小和网络传输速度相关的延迟,您可以使用google protocol buffers 通过网络压缩您的数据。 GitHub 项目是here

      【讨论】:

      • 协议缓冲区不只是二进制序列化的手段吗?与 WCF 方法相比,它们有什么显着优势吗?
      • WCF 不做这种高效的二进制序列化阅读这个:stackoverflow.com/questions/475794/…我无法深入解释。
      • 查看 Marc Gravell 实现的性能比较:code.google.com/p/protobuf-net/wiki/Performance
      • 是的,基准测试结果非常有吸引力。对我来说,这种性能提升(数量级)来自哪里并不明显,它需要更深入的调查。我会回来的。
      • DataContractJsonSerializer 结果比 BinaryFormatter 小?那个测试中一定有一些奇怪的东西,我不相信这种比较对我的想法是有效的。
      【解决方案3】:

      如果您使用双工通道,您可以让客户端连接到服务器,并在此过程中将另一个服务合同作为回调传递。然后,服务器使用此回调向客户端发送可用的更新。

      我已经使用这种方法编写了一个内部发布-订阅机制,并且延迟大约与您通过 WCF 所期望的一样低。

      您的目标绩效是多少?

      This MSDN article 讨论使用 WCF 双工通道。

      【讨论】:

      • 这基本上是 WCF 中 pub-sub 的定义......现在,“带有回调的 WCF 中的 pub-sub”方法中有很多细节会影响性能和延迟。目标性能很难量化——我看的是 1ms 的最高值,但如果不描述数据大小分布、更新率和可用资源,这个数字毫无意义。所以我会选择“尽可能低”的解决方案。
      • 对 WCF pub sub 解决方案我没有解决的一个问题是更新对象的重复序列化 - 每个客户端一次。当我需要在网络上简洁地表示对象,并且可以让客户端和服务器紧密耦合时,我制作了 byte[] 类型的消息,并使用专门构建的程序集在服务器和客户端上完成了自定义序列化在启动时使用 Reflection.Emit 从数据字典生成。
      • 我可以看到优势,但在我的情况下,数据本身已经由基本类型或字节数组的命名元素组成。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2019-10-09
      相关资源
      最近更新 更多