2009-04-21 66 views
5

就是把差异,优势和远程处理和插座之间......其缺点是服务器 - 客户端的功能....远程VS插座

回答

11

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

远程处理是一个.NET特定的工具,并且非常脆弱的重新版本控制。我不会建议客户端/服务器的远程处理 - 使用像WCF这样的东西来代替。

WCF是一个更灵活的通信堆栈 - 功能和复杂性很高,但可以说有点臃肿(XML,复杂的安全性等)。它是基于数据合同的,因此大致上是 open(客户端/服务器可以不同),但仍然有点关注.NET。


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

+0

对于“最佳”...取决于要求; -p – 2009-04-21 10:10:19

2

我的第二大马克格雷维尔写道 - 特别是远程处理和内部序列化是“容易”,但很容易打破,往往不能很好地扩展到公共网络(我不熟悉.net远程处理,但我想它需要一个众所周知的注册表服务,这在清理实验室环境时经常会遇到问题)。

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

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

1

我会说,选择之间的套接字和远程处理更好地考虑你正在开发什么类型的应用程序。套接字绝对适用于您自己的协议实现,低层次编程以及必须与其他tcp/ip应用程序通信的唯一途径。远程处理是开发新的.NET通信应用程序的一种优先方式,在这种应用程序中,您不需要使用tcp/ip堆栈,并确保您的应用程序与其他应用程序(可能是传统应用程序)进行对话。如果你只能使用.NET,最好选择.NET 3.5和WCF框架而不是.net 2.0远程处理,最后一种是死的和不支持的技术。

3

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