Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
为什么我们仍然使用HTTP而不是WebSocket来构建Web应用程序?_Http_Web Applications_Web_Websocket - Fatal编程技术网

为什么我们仍然使用HTTP而不是WebSocket来构建Web应用程序?

为什么我们仍然使用HTTP而不是WebSocket来构建Web应用程序?,http,web-applications,web,websocket,Http,Web Applications,Web,Websocket,最近,我深入讨论了WebSocket的主题,并构建了一个利用它们的小应用程序 现在我想知道为什么基于HTTP的API仍然被使用,或者更确切地说,为什么它们仍然被提出 就我所见,通过HTTP使用WS没有什么是我做不到的,但反过来,我获得了很多改进 与WS-one相比,从HTTP支持的后端获得更多好处的应用程序的真实示例是什么?书签?页面历史记录?缓存?搜索引擎的可见性?@Julian Reschke提出了很好的观点。web是基于文档的,如果您希望您的应用程序在WWW中运行。。。它必须遵守游戏规则

最近,我深入讨论了WebSocket的主题,并构建了一个利用它们的小应用程序

现在我想知道为什么基于HTTP的API仍然被使用,或者更确切地说,为什么它们仍然被提出

就我所见,通过HTTP使用WS没有什么是我做不到的,但反过来,我获得了很多改进


与WS-one相比,从HTTP支持的后端获得更多好处的应用程序的真实示例是什么?

书签?页面历史记录?缓存?搜索引擎的可见性?

@Julian Reschke提出了很好的观点。web是基于文档的,如果您希望您的应用程序在WWW中运行。。。它必须遵守游戏规则

尽管如此,您仍然可以创建符合这些要求的基于WS的SPA应用程序

  • 使用HTML5历史API,您可以。这允许您根据应用程序的状态在地址栏中使用不同的URL,然后启用书签和页面历史记录。AngularJS的插件“ui路由器”在这里运行得非常好,如果通过编程更改状态,则会更改URL,反之亦然

但您仍然希望将HTTP用于其他一些事情,比如获取资源或视图,并使用HTTP缓存机制缓存它们。例如,如果您有一个大的应用程序,您希望按需下载一些大视图,而不是将所有内容打包到一个大的主视图中

例如,为HTML实现自己的缓存机制以获取视图并将其缓存在本地存储中是一件痛苦的事情。此外,通过使用传统的HTTP请求,这些视图可以缓存在CDN和其他代理缓存中

WebSocket非常适合维护“连接”语义、以较小的延迟发送数据以及随时从服务器获取推送数据。但是,对于可以从分发机制(如缓存、CDN和负载平衡)中获益的操作,传统HTTP请求仍然更好


关于RESTAPI和WebSocket API(我想你的问题实际上是关于这一点的),它更方便,而不是偏好。如果您的API每个连接的调用率很高。。。websocket可能更有意义。如果API的调用率很低,那么使用WebSocket是没有意义的。请记住,Websocket连接虽然是轻量级的,但它意味着服务器中的某些内容被保留(即:连接状态),如果请求速率不合理,则可能会浪费资源。

HTTP和Websocket是两种Web工具,它们最初用于完成不同的任务。 使用HTTP,您通常实现请求/响应范例。 使用WebSocket,您通常实现异步实时消息传递范例

有几个应用程序需要这两种范例

您还可以尝试将WebSocket用于请求/响应,并将HTTP用于异步实时消息传递范例。虽然前者没有什么意义,但后者是一种广泛使用的技术,在WebSocket无法工作的所有情况下(由于网络中介、缺少客户端支持等原因)都是必要的。如果您对这个主题感兴趣,请查看我的另一个答案,它试图澄清与这些技术相关的术语:

related: