TCP Vs. Http基准

我有一个Web应用程序坐在IIS上,并与[远程]服务器交谈。 我不确定是selectTCP还是Http,作为主要的协议。

更多细节:

  1. 我将有多个服务\端点
  2. 其中一些将是单向的
  3. 另一个将是双向的
  4. 网页将在服务的前面工作
  5. 我们正在谈论高规模的网站

我知道差别很好,但我正在寻找一个很好的基准,这表明TCP有多快?

HTTP是一个build立在TCP层的顶层的层,用来规范数据传输。 所以自然使用TCP套接字将比使用HTTP更轻。 如果性能是您唯一关心的问题,那么简单的TCP就是您的最佳解决scheme。

您可能想要考虑HTTP,因为它的易用性和简单性最终减less了开发时间。 如果你正在做一些可能被浏览器直接使用的东西(通过AJAX调用),那么你应该使用HTTP。 对于一个非现代的浏览器来直接使用没有HTTP的TCP连接,你将不得不使用Flash或Silverlight,这通常发生在video和/或audio等丰富内容上。 但是,现在的许多现代浏览器(截至2013年)都支持通过JavaScript直接访问networking,audio和video资源的API。 唯一要考虑的是用户中现代Web浏览器的使用率; 有关浏览器兼容性的最新信息,请参阅caniuse.com 。

至于基准, 这是我发现的唯一的事情。 见第5页,它有性能图。 请注意,由于它将TCP / Binary数据选项与HTTP / XML数据选项进行比较,因此它并不真正比较苹果和苹果。 这引出了一个问题:你的服务输出什么样的数据? 二进制(video,audio,文件)或文本(JSON,XML,HTML)?

一般来说,像军事或金融领域的性能导向系统可能会使用普通的TCP连接。 一般networking公司将select使用HTTP并使用IIS或Apache来托pipe他们的服务。

你真的需要一个答案的问题是“将TCP或HTTP更快为我的应用程序”。 答案是它取决于应用程序的性质,以及在应用程序中使用TCP和/或HTTP的方式。 通用的HTTP vs TCP基准testing不会回答您的问题,因为基准testing可能不符合您的应用程序行为。

从理论上讲,使用TCP的最佳devise/实现解决scheme将比使用HTTP的解决scheme更快。 但是也可能有相当多的工作来实施…取决于你的应用程序的细节。

还有其他问题可能会影响您的select。 例如,如果使用HTTP,则不太可能遇到防火墙问题,而不是在某些随机端口上使用TCP。 另一个原因是HTTP可以更容易地在IIS服务器和后端系统之间实现负载平衡器。

最后,在一天结束的时候,系统可靠,可维护和(可能)可扩展性要比速度快很重要。 一个明智的策略是首先实施简单的版本,但是如何让速度更快,你的脑海里有计划…如果简单的解决scheme太慢了。

你可以随时进行基准testing。

一般来说,如果你想要完成的任务可以很容易地通过HTTP完成(也就是说,否则你会考虑使用原始TCP的唯一原因是可能的性能提升),你应该使用HTTP。 当然,你可以做套接字编程,但为什么要麻烦? 许多人花费了大量的时间和精力来构buildHTTP客户端库和服务器,他们花费了更多的时间来优化和testing代码,而不是花在TCP套接字上。 有很多可能的错误,你必须处理,边缘情况和可以完成的优化,使用HTTP库函数通常更容易和更安全。

此外,HTTP规范定义了各种function(客户端/服务器实现,您可以免费使用,即不需要额外的实现工作),这使得任何第三方的互操作性变得更容易。 “这里是我的url,这里是你发送的规则,这里是我返回的规则…”