TCP与Http基准

时间:2009-07-28 20:44:45

标签: http tcp

我正在使用IIS上的Web应用程序,并与[remote] Service-Machine交谈。 我不确定是选择TCP还是Http作为主协议。

更多详情:

  1. 我将拥有多个service \ endpoint
  2. 其中一些将是单向的
  3. 另一个将是双向的
  4. 网页将在服务面前工作
  5. 我们正在谈论高规模的网站
  6. 我非常了解差异,但我正在寻找一个好的基准测试,显示TCP的速度有多快?

4 个答案:

答案 0 :(得分:71)

HTTP是在TCP层的顶部构建的层,用于标准化数据传输的一些层。所以使用TCP套接字自然会比使用HTTP更重。如果性能是您唯一关心的,那么普通的TCP是最适合您的解决方案。

您可能需要考虑HTTP,因为它易于使用且简单,最终缩短了开发时间。如果您正在做一些可能被浏览器直接使用的东西(通过AJAX调用),那么您应该使用HTTP。对于非现代浏览器直接使用没有HTTP的TCP连接,您必须使用Flash或Silverlight,这通常适用于视频和/或音频等丰富内容。但是,现在许多现代浏览器(截至2013年)都支持API直接通过JavaScript访问网络,音频和视频资源。唯一要考虑的是用户之间现代Web浏览器的使用率;有关浏览器兼容性的最新信息,请参阅caniuse.com

至于基准测试,this是我发现的唯一内容。见第5页,它有性能图表。请注意,它并不真正比较苹果和苹果,因为它将TCP /二进制数据选项与HTTP / XML数据选项进行比较。这引出了一个问题:您的服务输出的是哪种数据?二进制(视频,音频,文件)或文本(JSON,XML,HTML)?

一般来说,像军事或金融部门那样的面向绩效的系统可能会使用普通的TCP连接。一般网络公司将选择使用HTTP并使用IIS或Apache来托管其服务。

答案 1 :(得分:33)

您真正需要回答的问题是“对于我的应用程序,TCP或HTTP会更快吗?”答案是它取决于应用程序的性质,以及在应用程序中使用TCP和/或HTTP的方式。通用HTTP与TCP基准测试无法回答您的问题,因为基准测试可能与您的应用程序行为不匹配。

理论上,使用TCP的最佳设计/实现的解决方案将比使用HTTP的解决方案更快。但实施起来可能还要多得多......取决于您的应用程序的细节。

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

最后,在一天结束时,您的系统可能更安全,可靠,可维护且(可能)可扩展,而不是快速。一个明智的策略是首先实现简单版本,但是如果简单的解决方案太慢,那么就有计划如何让它更快......

答案 2 :(得分:6)

您可以随时对其进行基准测试。

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

另外,HTTP规范定义了所有类型的功能(以及客户端/服务器实现,您可以免费使用它们,即没有额外的实现工作),这使得任何第三方互操作性变得更加容易。 “这是我的网址,以下是您发送内容的规则,以下是我返回的规则......”

答案 3 :(得分:0)

我有一个自我托管的Windows本机C ++服务器应用程序,在其中使用了Casablanca C ++ REST SDK代码。我可以使用任何客户端C#,JavaScript,C ++,cURL,基本上可以发送POST,GET,PUT,DEL的任何内容消息可用于向该自托管Windows应用发送请求消息。另外,我可以使用普通的浏览器地址栏使用各种参数来执行与GET相关的请求。目前,我仅在专用Intranet上运行此系统,因此它的运行速度非常快-我没有针对仅做原始TCP进行基准测试,但是在专用Intranet上,我怀疑是否会有几微秒的差异?为了方便和易于开发以及扩展到功能完善的Internet应用程序,这是梦想成真。它是一个专用系统,带有使用小JSON数据包的专用协议,因此不确定是否适合您的应用程序需求吗?另一件事是,由于Casablanca REST SDK可移植到这些OS,因此可以很容易地将Windows应用程序本机C ++代码移植到Linux / MacOS上。