远程与插座

时间:2009-04-21 10:05:40

标签: c#

远程处理和套接字之间的差异,优点和缺点是什么...这是服务器 - 客户端功能的最佳方式....

4 个答案:

答案 0 :(得分:11)

套接字是两个端点之间的原始二进制流。您需要包装自己的RPC(etc)层来处理消息,并处理大量的基础结构代码。然而,由于它们非常接近金属,因此非常非常有效。它不依赖于任何特定的体系结构,只要两端都使用相同的消息格式即可。像protobuf-net这样的工具可以帮助您为流构建二进制消息(而不是滚动自己的序列化代码)。

远程处理是一种特定于.NET的工具,并且很容易重新版本化。我不建议远程使用客户端/服务器 - 而是使用像WCF这样的东西。

WCF是一个更灵活的通信堆栈 - 很多功能和复杂性,但可以说有点膨胀(xml,复杂的安全性等)。它是基于数据协定的,因此大致打开(客户端/服务器可能不同),但仍然有点针对.NET。


编辑有关信息,protobuf-net也提供了RPC堆栈;目前只提供了一个HTTP实现,但在某些时候我会添加原始TCP / IP。

答案 1 :(得分:3)

与Remoting或WCF相比,直接套接字操作可以为您提供更多的功能,灵活性,性能和不幸的复杂性。但是,如果您需要低级TCP / IP的好处,例如非阻塞IO和自定义协议,Ragel等工具和Mina等框架可以减轻复杂负担。我建议首先尝试更高级别的API,如WCF,如果这些不符合您的需求,则只使用直接套接字。

答案 2 :(得分:2)

Marc Gravell写的第二大 - 特别是远程处理和内部序列化“很容易”,但很容易破解,往往不能很好地扩展到公共网络(我不熟悉.net远程处理,但我猜测它需要一个众所周知的注册服务,这在离开干净的实验室环境时经常会出现问题。)

从长远来看,实现标准甚至滚动自己的RPC更难但更安全:您没有代码修订问题(或者它们更容易控制),扩展完全由您自己的代码控制,并且它易于使用各种技术开发组件。

有许多工具可以帮助您轻松地在套接字上构建RPC机制,但我真的很喜欢使用普通的旧HTTP - 在服务器进程内运行一个简单的HTTP嵌入式服务器,而客户端只需要一个HTTP客户端发送消息。如果您开发自己的简单RESTful调用语义(而不是使用像SOAP或XML-RPC这样的膨胀消息格式),那么几乎无所事事: - )

答案 3 :(得分:1)

我想说在套接字和远程处理之间进行选择时,最好考虑一下您正在开发的应用程序类型。套接字绝对适用于您自己的协议实现,低级编程以及唯一的方法,如果您必须与其他tcp / ip应用程序进行通信。远程处理是开发新的.NET通信应用程序的一种优先方式,您无需进入tcp / ip堆栈并确保应用程序与其他应用程序(可能是遗留应用程序)进行通信。如果你只能使用.NET,最好选择.NET 3.5和WCF框架而不是.net 2.0远程处理,最后一个是死的和不支持的技术。