我有一个Web应用程序坐在IIS,并通过[远程]服务的机器说话。 我不知道是否选择TCP或HTTP,作为主要的协议。
更多细节:
- 我将有一个以上的服务\端点
- 其中一些将是单向的
- 另将两路
- 该网页将工作服务的盈
- 我们正在谈论喜规模的网站
我知道其中的差别相当不错,但我期待有一个良好的标杆,展示了如何更快是TCP?
我有一个Web应用程序坐在IIS,并通过[远程]服务的机器说话。 我不知道是否选择TCP或HTTP,作为主要的协议。
更多细节:
我知道其中的差别相当不错,但我期待有一个良好的标杆,展示了如何更快是TCP?
HTTP是建立ontop的TCP层的一些什么标准化的数据传输层。 所以很自然的使用TCP套接字会比使用HTTP少沉重。 如果性能是您所关心的唯一事情那么简单的TCP是您的最佳解决方案。
你可能要考虑,因为它的易用性和简单性,最终减少了开发时间的HTTP。 如果你正在做的事情可能是由浏览器(通过一个AJAX调用)直接食用,那么你应该使用HTTP。 对于非现代浏览器直接消费的,非HTTP的TCP连接,你将不得不使用Flash或Silverlight,这通常发生于丰富的内容,例如视频和/或音频。 不过,现在许多现代的浏览器(如2013年),支持API来通过JavaScript直接访问网络,音频和视频资源。 唯一要考虑的就是你的用户之间的现代web浏览器的使用率; 看到caniuse.com获得有关浏览器兼容性的最新信息。
至于基准, 这是我发现的唯一的事情。 见第5页,它具有性能曲线图。 需要注意的是,因为它比较与HTTP / XML数据选项TCP /二进制数据选项它并没有真正逐个比较。 这引出了一个问题:什么样的数据是你的服务输出? 二进制文件(视频,音频文件)或文本(JSON,XML,HTML)?
在像那些在军事或财政部门一般业绩为导向的系统可能会使用普通的TCP连接。 凡为一般的网络中心的公司将选择使用HTTP和使用IIS或Apache来承载他们的服务。
这个问题你真的需要一个答案是“将TCP或HTTP是我的应用程序更快”。 答案是,这取决于你的应用程序的性质,并在您使用TCP和/或HTTP在应用程序的方式。 一个普通的HTTP VS TCP基准不会回答你的问题,因为机会是基准将不匹配您的应用程序的行为。
从理论上讲,使用TCP最佳设计/实现溶液将比一个使用HTTP更快。 但是,这也可能是相当多的工作来实现......这取决于你的应用程序的细节。
有可能会影响你的选择等问题。 例如,你是不太可能,如果你使用HTTP比如果您使用TCP一些随机端口上运行到防火墙问题。 另一个原因是,HTTP将使其更容易实现IIS服务器和后端系统之间的负载均衡。
最后,在一天结束的时候它可能是更重要的是你的系统是安全,可靠,维护和(也许)可扩展性比它快。 一个明智的策略是首先实现简单的版本,但在你的头如何使它更快的计划......如果简单的解决方法是太慢了。
你总是可以基准它。
一般来说,如果你要完成可以通过HTTP容易做的事情(即否则你会考虑使用原始TCP的唯一原因是为可能的性能提升),你应该可能只是使用HTTP。 当然,你可以做套接字编程,但何必呢? 很多人已经花了很多时间和精力建立HTTP客户端库和服务器,他们已经花了waaaaaay更多时间优化和测试代码比你将永远能够可能在你的TCP套接字花。 只是有可以做这么多可能出现的错误,你将不得不处理,边缘的情况下,和优化,它通常是更容易,使用更安全的库函数用于HTTP。
另外,在HTTP规范定义各种功能(和客户端/服务器实现,你得使用“免费”,即没有额外的实施工作),这使得任何第三方的互操作性容易得多。 “这是我的网址,这里的规则,你送什么,这里有什么我返回规则......”
我有一个自托管,我使用的卡萨布兰卡C ++ REST SDK代码在Windows本地C ++服务器应用程序。我可以使用任何客户端C#,JavaScript的,C ++,卷曲,基本上任何可以发送POST,GET,PUT,DEL消息可以是用于请求消息发送到这个自托管的Windows应用程序。 我也可以使用普通的浏览器地址栏做GET使用各种参数相关请求。 目前我只在专用Intranet运行该系统,它是非常快的 - 我还没有基准它反对只是在做原始TCP,但在一个专用Intranet我怀疑会有甚至几微秒的区别? 对于发展和扩大到完全成熟的互联网应用能力的方便性和易用性这是一个梦想成真。 它是一个专用的系统使用小JSON数据包,使不能肯定,如果适合您的应用需求或者不是私人的协议? 另一个好处是Windows应用程序的本地C ++代码可以很容易地移植到Linux / MacOS的运行作为卡萨布兰卡REST SDK可以移植到这些操作系统。