.net 为低延迟设计WCF服务器

.net 为低延迟设计WCF服务器,.net,wcf,networking,latency,.net,Wcf,Networking,Latency,如何在发布-订阅场景中实现WCF服务器的低延迟?具体来说,客户机订阅数据并接收更新,所讨论的延迟是数据更改和客户机接收更改之间的延迟?CPU、内存和带宽要求并不重要,可能很高 基础是显而易见的:二进制序列化、命名管道等。但它是否有意义,例如,通过始终连接的流发送数据?还是将批更新作为单个消息发送以减少RPC/头开销 可能有一些项目的代码或接口可用作示例?如果您使用双工通道,您可以让客户端连接到服务器,并在此过程中作为回调传递另一个服务合同。然后,服务器使用此回调在更新可用时向客户端发送更新 我已

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

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


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

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

我已经使用这种方法编写了一个内部pub-sub机制,延迟大约是您通过WCF所期望的最低值

你的目标绩效是什么


讨论使用WCF双工通道。

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

您看过吗


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

这基本上是WCF中发布订阅的定义。。。现在,在“使用回调的WCF中的pub-sub”方法中有很多影响性能和延迟的细节。目标性能很难量化——我看的是1ms,但如果不描述数据大小分布、更新率和可用资源,这个数字毫无意义。因此,我将用“尽可能低”的解决方案来解决。WCF发布子解决方案的一个问题是更新对象的重复序列化——每个客户机一次,我还没有解决到令我满意的程度。当我需要在线路上简洁地表示对象,并且能够承受客户机和服务器紧密耦合时,我将我的消息类型设置为
byte[]
,并使用使用反射生成的特制程序集在服务器和客户端上进行自定义序列化。启动时从数据字典发出。我可以看到其优点,但在我的例子中,数据本身已经由基本类型或字节数组的命名元素组成。协议缓冲区不只是二进制序列化的手段吗?与WCF相比,它们有什么显著的优势吗?WCF不能实现这种高效的二进制序列化阅读:我无法深入解释。查看Marc Gravell实现的性能比较:是的,基准测试结果非常有吸引力。对于我来说,这种性能增益(数量级)来自何处并不明显,需要进行更深入的调查。我会回到这里。DataContractJsonSerializer的大小比BinaryFormatter小?在那个测试中一定有一些奇怪的事情,我不相信比较对于我心目中的交流是有效的。