remoting和socket之间的区别、优缺点是什么……哪种方式是服务器-客户端功能的最佳方式...
发布于 2009-04-21 10:10:01
套接字是两个端点之间的原始二进制流。您需要包装自己的RPC (etc)层来处理消息,并处理大量的基础架构代码。然而,由于它们离金属如此之近,这可能是非常非常有效的。它不依赖于任何特定的体系结构,只要两端使用相同的消息格式即可。像protobuf-net这样的工具可以帮助您为流构造二进制消息(而不是使用自己的序列化代码)。
Remoting是一种特定于.NET的工具,它的重新版本控制非常脆弱。我不建议客户端/服务器使用远程处理,而是使用像WCF这样的东西。
WCF是一个更灵活的通信堆栈-非常强大和复杂,但可以说也有点臃肿(xml,复杂的安全性等)。它是基于数据契约的,所以大致上是开放的(客户机/服务器可以不同),但仍然有点.NET。
还提供了一个堆栈;目前只提供了一个HTTP实现,但将来我会添加原始的protobuf-net /IP。
发布于 2009-04-21 12:08:21
与远程处理或WCF相比,直接套接字操作可以为您提供更强大的功能、更高的灵活性和更高的性能,但不幸的是,它的复杂性更高。但是,如果您需要低级TCP/IP的好处,如非阻塞IO和自定义协议,则Ragel等工具和Mina等框架可以减轻复杂性负担。我建议先尝试像WCF这样的高级API,只有在这些不能满足您的需求时才使用直接套接字。
发布于 2009-04-21 10:18:03
我第二个写的是Marc Gravell写的--特别是远程处理和内部序列化很“容易”,但是很容易破坏,并且经常不能很好地扩展到公共网络(我对.net远程处理不是很熟悉,但我猜它需要一个众所周知的注册表服务,这在离开干净的实验室环境时往往是有问题的)。
实现一个标准的甚至自己的RPC更难,但从长远来看更安全:您不会遇到代码修订的问题(或者它们更容易控制),伸缩完全由您自己的代码控制,而且使用各种技术开发组件也很容易。
有许多工具可以帮助您轻松地在套接字上构建RPC机制,但我真的很喜欢使用普通的老式HTTP -在服务器进程中运行一个简单的HTTP嵌入式服务器,而您的客户端只需要一个HTTP客户端来发送消息。如果您开发自己的简单RESTful调用语义(而不是使用一些臃肿的消息格式,如SOAP或XML),那么几乎没有什么可做的:-)
https://stackoverflow.com/questions/771912
复制相似问题