你会推荐什么样的通讯协议?

时间:2010-07-22 16:02:26

标签: .net client-server protocols

我即将设计一个客户端应用程序,服务器部分也没有设计。

我需要决定通信协议。

要求是:

  • 快速,紧凑
  • 支持双向文件传输双向
  • 服务器可能是PHP,客户端.NET

到目前为止,我已经考虑过这些:

  • 通过HTTP自定义XML - 我以前做过这个,但它不太适合文件传输,否则确定
  • SOAP - 没有经验,我读它非常冗长和复杂
  • Google protobuf - 阅读了很多有关此内容的好消息
  • 纯HTTP - 使用get和post - 这可能是非常可扩展的。

我愿意接受建议。到目前为止,我倾向于protobuf。

修改:更多信息

  • 服务器将是数据量大,应用程序层薄,可能只有数据库本身。数十亿记录,搜索密集(富文本和自定义搜索)。
  • 预期的客户端应用程序数量有所增加,但可能会增长
  • 从服务器到客户端的两种类型的消息,小(100KB以下),但很常见,大(文件下载,10MB以下)
  • 客户端仅发回较小的消息,但提供更多信息。
  • 我希望有信息结构化,以两种方式提供元信息。
  • 我希望它可以在未来的变化中进行扩展
  • 强制加密(将https视为传输层)
  • Lantency非常重要,我希望实现“标准”的网络延迟(200毫秒以下),对于小消息。这实际上取决于许多事情。

6 个答案:

答案 0 :(得分:0)

我会使用简单的HTTP,TCP(带套接字)或FTP,除非你真的需要一些更软化的功能

答案 1 :(得分:0)

协议缓冲区确实对我们有效:)

您可能希望通过HTTP对它们进行分层。显然,您需要在TCP / IP和协议缓冲区本身之间使用某种类传输层 - protobufs不会定义除序列化消息之外的任何内容。 HTTP通常很容易理解,很容易通过防火墙,并且在多个平台上都支持客户端和服务器。

一个问题:我不确定PHP中支持哪种协议缓冲区。有一个beta library here,但我在3rd party add-ons page中列出了所有内容。

答案 2 :(得分:0)

请记住,在使用HTTP时,服务器无法在没有请求的情况下向客户端发送信息,因此您可能必须使用类似于长轮询的技术。

我想将此添加为评论,但我无法做到。

答案 3 :(得分:0)

我认为协议缓冲区听起来是个不错的选择。这几乎就是它的设计目标。

.NET端口是由Jon Skeet编写的:

http://code.google.com/p/protobuf-csharp-port/

我不确定PHP的支持程度有多大。这可能是个问题。

答案 4 :(得分:0)

我还建议通过TCP协议缓冲区。除非你使用隐式使用HTTP的更高级别的抽象,否则应该避免使用HTTP。

协议缓冲区的.NET端口AFAIK不支持异步读取protobuffers,所以我建议使用异步套接字并使用长度前缀的protobuffers。

我已经在我的.NET TCP/IP FAQ上为协议设计写了几条建议,包括基于TCP / IP的XML(我同意XML并不适合您的需求)。

答案 5 :(得分:0)