在.Net中进行RPC的优化方法

Ted*_*sen 6 .net wcf remoting rpc

我正在考虑将.Net应用程序的一部分移动到其他计算机上.显而易见的方法是使用带有二进制tcp协议的WCF,例如" 最简单的方法来获取.NET的快速RPC? "中的描述.

我将进行大量的呼叫,延迟是一个大问题.基本上一台计算机将运行一个物理模拟器,其他计算机将使用几百个命令的API与它进行交互.

我认为最好的方法是制作一个自定义二进制协议,其中API命令由int16和序列号标识,然后是必需的参数.硬连线发送和接收类将消除任何不必要的开销.

但是,由于我们正在讨论数百个API命令,因此这是很多工作.

有关实施它的最佳方法的任何想法?

编辑: 澄清:.Net中的AFAIK序列化未优化.序列化和反序列化对象的惩罚相对较高,例如反射的内部使用.这是我想要避免的,因此我的直接映射(hardwiring)方法.

经过一番搜索,我找到了一个应用程序,我有一个模糊的回忆:http://www.protocol-builder.com/

Ree*_*sey 8

减少总流量(这将是自定义协议与使用WCF的主要好处)不会对延迟产生很大影响.主要问题是将"所需参数"的数据量保持在最低限度,因此每个请求都相对较小.WCF中的默认序列化已经非常有效,尤其是在本地网络上使用TCP时.

在您所描述的场景中,由于许多客户端连接到集中式服务器,因此消息传输本身不太可能成为瓶颈 - 处理特定消息可能是瓶颈,而传输机制也不会同样重要.

就个人而言,我只会使用WCF,而不是在尝试构建自定义协议.如果,一旦运行,您发现有问题,那么您可以轻松地将传输抽象为当时的自定义协议,并将其映射到相同的接口.这需要非常少的额外代码,而不仅仅是预先自定义协议堆栈,并且可能使代码更加清晰(因为自定义协议将被隔离到单个映射到"干净"API).但是,如果您发现运输不是瓶颈,那么您将节省大量的劳动力和精力.