Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 您推荐什么通信协议?_.net_Client Server_Protocols - Fatal编程技术网

.net 您推荐什么通信协议?

.net 您推荐什么通信协议?,.net,client-server,protocols,.net,Client Server,Protocols,我将要设计一个客户端应用程序,而服务器部分也没有设计 我需要决定通信协议 这些要求是: 快速、紧凑 支持双向二进制文件传输 服务器可能是PHP、客户端.NET 到目前为止,我已经考虑了以下几点: HTTP上的自定义XML—我以前做过,但它不太适合文件传输,否则可以 SOAP-没有经验,我读到它非常冗长和复杂 谷歌protobuf-阅读很多关于这方面的好东西 纯HTTP—使用get和post—这可能是很难扩展的。 我愿意接受建议。到目前为止,我倾向于protobuf 编辑:更多信息 服务器将是数据

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

我需要决定通信协议

这些要求是:

快速、紧凑 支持双向二进制文件传输 服务器可能是PHP、客户端.NET 到目前为止,我已经考虑了以下几点:

HTTP上的自定义XML—我以前做过,但它不太适合文件传输,否则可以 SOAP-没有经验,我读到它非常冗长和复杂 谷歌protobuf-阅读很多关于这方面的好东西 纯HTTP—使用get和post—这可能是很难扩展的。 我愿意接受建议。到目前为止,我倾向于protobuf

编辑:更多信息

服务器将是数据量大、应用层薄的服务器,可能只有数据库本身。百万到十亿条记录,搜索密集型全文和自定义搜索。 预期的客户端应用程序计数以百分之一百为单位,但可能会增加 从服务器到客户端的两种类型的消息,小到100KB,但非常常见,大文件下载,小于10MB 客户端只发送较小的消息,但包含更多信息。 我希望信息结构化,以双向提供元信息。 我希望它可以扩展以备将来更改 将https视为传输层时必须进行加密 Lantency很关键,我希望对于小消息来说,200毫秒以下的标准网络延迟是很好的。这确实取决于很多事情。
我会使用简单的HTTP、带套接字的TCP或FTP,除非您真的需要一些更实用的功能

那么协议缓冲区肯定适合我们:

不过,您可能希望通过HTTP将它们分层。显然,在TCP/IP和协议缓冲区之间需要某种传输层——protobufs只定义序列化消息。HTTP通常被很好地理解,很容易通过防火墙,并且在多个平台上同时支持客户端和服务器


一个问题:我不确定PHP中有哪种协议缓冲区支持。有一个,但这就是我在中所看到的。

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


我想将此作为评论添加,但我无法这样做。

我认为协议缓冲区听起来是一个不错的选择。这就是它的设计初衷

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


不过,我不确定PHP中的支持有多好。这可能是个问题。

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

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


我在my上为协议设计写了一些建议,包括TCP/IP上的XML。不过,我确实同意XML不适合您的需要。

我不会将HTTP用于您常见的消息类型之一,大型但看起来紧张的TCP适合您的要求,不是吗?不是,TCP不是应用程序通信协议。这是一个传输协议。这里没有足够的信息来做出明智的决定。详细说明您的用例、预期的通信模式、延迟要求、部署场景、参与方等。;否则,你只会得到关于人们个人喜欢/认为什么是酷的建议,而不是什么适合你的建议。@Mark Nottingham查看编辑:这很好,这就是我提到服务器客户端的原因。我需要一些元信息,所以FTP是不成问题的。TCP是传输协议,我需要使用自己的定义。我接受了这一点,因为我决定从尽可能简单的开始。如果需要,我使用https GET和POST与xml一起使用。