我有一个运行在IIS上的Web应用程序,它与[远程]服务机器通信。
我不确定主要协议选择TCP还是Http。
更多细节:
- 我将有多个服务/端点
- 其中一些是单向的
- 其他一些是双向的
- Web页面将在服务之前工作
- 我们谈论的是高规模的网站
我很清楚它们之间的区别,但我正在寻找一个好的基准,以显示TCP有多快?
HTTP是建立在TCP层之上的一种协议,旨在标准化数据传输。因此,使用TCP套接字比使用HTTP更轻量级。如果您只关心性能,那么纯TCP是最好的解决方案。
您可能会考虑使用HTTP,因为它易于使用和简单,从而降低了开发时间。如果您正在做一些可能被浏览器(通过AJAX调用)直接消费的内容,则应使用HTTP。对于非现代浏览器来直接使用不带HTTP的TCP连接,您必须使用Flash或Silverlight,这通常用于富媒体内容,例如视频和/或音频。然而,许多现代浏览器(截至2013年)现在支持API通过JavaScript直接访问网络、音频和视频资源。唯一需要考虑的是现代Web浏览器在您的用户中的使用率;有关浏览器兼容性的最新信息,请参见caniuse.com。
至于基准测试,这里是我找到的唯一一份文献。请参见第5页,其中有性能图表。请注意,它并没有真正比较苹果和苹果,因为它比较了TCP/二进制数据选项与HTTP/XML数据选项。这引出了一个问题:您的服务输出什么类型的数据?二进制(视频、音频、文件)还是文本(JSON、XML、HTML)?
总的来说,像军事或金融领域这样面向性能的系统可能会使用纯TCP连接。而通常面向Web的公司将选择使用HTTP,并使用IIS或Apache来托管其服务。
WebSocket
进行原始TCP连接,在浏览器中使用JavaScript来创建丰富的内容,也可以使用Canvas/WebGL。 - Ben Barkay您可以进行基准测试。
一般来说,如果您想要完成的任务可以通过HTTP轻松完成(即您考虑使用原始TCP的唯一原因是可能会提高性能),那么您应该只使用HTTP。当然,您可以进行套接字编程,但为什么要麻烦自己呢?很多人花费了大量时间和精力构建HTTP客户端库和服务器,并且他们花费了比您在TCP套接字上可能花费的时间更长的时间来优化和测试该代码。通常情况下,有太多可能出现的错误、边缘情况和可以进行的优化,因此使用HTTP的库函数通常更容易、更安全。
此外,HTTP规范定义了各种功能(并由客户端/服务器实现),这使得任何第三方互操作性更加容易。"这是我的URL,这是您发送的规则,这是我返回的规则..."