【问题标题】:how is websocket different than http with header connection-keep-alive=millionwebsocket与标头connection-keep-alive =million的http有何不同
【发布时间】:2013-07-10 14:53:38
【问题描述】:

这个 HTTP 标头会不会导致连接长时间保持打开状态?那么有什么优势呢?

谁能帮我澄清一下?我想我似乎错过了这个概念。

【问题讨论】:

标签: websocket


【解决方案1】:

在 TCP/IP 级别看起来是一样的:一个套接字是打开的。

但从浏览器的角度来看,它们是完全不同的。 keep-alive 是让浏览器重新使用以请求更多内容(例如图像、css 文件、站点上的下一页)。 WebSockets 用于在您的 Javascript 应用程序代码中进行双向通信。服务器可以随时选择发送内容。您的 JS 应用程序可以随时向服务器发送数据。

还值得与 SSE(又名 EventSource)进行比较,后者也允许服务器选择随时发送内容,但它是单向的(您的 JS 应用程序在需要发送更多数据时不得不求助于 XHR) . (WebSockets 和 SSE 的完整比较可能会变得非常复杂,所以我在这里不再多说,只是说 SSE 通常是正确的选择。)

还可以与 HTTP/2(又名 SPDY)中的服务器推送进行比较。这是为了让服务器主动推送文件(图像、css 文件、站点上的下一页),但它又是在浏览器级别,不受 Javascript 控制。

【讨论】:

  • 所以你说的是内容:保持活动服务器仅在浏览器请求时才发送数据。它在连接打开时不断请求,而在 Web 套接字浏览器中不必请求服务器可以在需要时发送。如果需要,您可以手动请求/告诉服务器发送。
  • 我认为浏览器不会“不断请求”。 (虽然如果你有一个每秒加载一个新图像的 javascript 循环,那么我想它会一直很忙。)还要记住,如果要获取大量内容,http/1.1 通常会与服务器建立 6 个连接。 (我知道你的问题是理论上的,但总体而言,很长的保持活动时间几乎肯定是个坏主意。)
  • 我想我明白了,即使在长轮询/http.. 客户端与服务器通信它需要发送 http req。服务器可能会与客户端交谈。但是连接超时并且最终必须进行不必要的连接。但是我看到有人说 websocket 让更多的客户共享空间。这是如何工作的。
  • @MuhammadUmer 回复:“人们说 websocket 让更多的客户共享空间”,我不确定这是什么意思。有链接之类的吗?
  • 要进行这样的比较,您需要在比较的内容上更加精确;以及您正在优化的内容(内存?)。正如我回答的那样,从浏览器到服务器的保持活动 http 连接用于不同的目的,所以无论如何比较有点奇怪。但是,如果你的 websocket 服务器是一个 PHP 实例,那么它也使用了一个线程和 2MB(或其他)。
猜你喜欢
  • 1970-01-01
  • 2012-09-15
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2011-10-25
  • 2011-09-14
  • 2017-07-31
相关资源
最近更新 更多