【发布时间】:2011-09-01 02:22:48
【问题描述】:
我正在考虑将 .Net 应用程序的一部分移动到其他计算机上。显而易见的方法是简单地使用带有二进制 tcp 协议的 WCF,例如“Easiest way to get fast RPC with .NET?”中的描述。
我会打大量电话,延迟是个大问题。基本上,一台计算机将运行物理模拟器,而其他计算机将使用包含数百个命令的 API 与之交互。
我认为最好的方法是制作一个自定义二进制协议,其中 API 命令由 int16 和序列号标识,然后是所需的参数。硬连线发送和接收类将消除任何不必要的开销。
但因为我们要讨论数百个 API 命令,所以工作量很大。
对实现它的最佳方法有什么想法吗?
编辑: 澄清:.Net 中的 AFAIK 序列化未优化。例如在反射的内部使用中,对对象进行序列化和反序列化的代价相对较高。这是我想要避免的,因此我的想法是直接映射(硬连线)方法。
经过一番搜索,我发现了一个我模糊记得的应用程序:http://www.protocol-builder.com/
【问题讨论】:
-
你说延迟是一个大问题,但延迟几乎是固定的。 带宽是你的瓶颈吗?如果您想在 WCF 的便利性和自定义协议的性能之间取得折衷,我可以建议减少 WCF 中的带宽的方法...
-
延迟是指从物理事件(例如碰撞,“同时”可能有数千个)处理和采取行动所需的时间。 (是的,我也必须限制事件的数量。)
-
降低成本的有效方法是发送具有更大负载的单个消息。这与带宽减少有关。例如,我非常喜欢换掉序列化程序(DataContractSerializer 并不以简洁着称)