什么是长轮询、WebSocket、服务器发送事件(SSE)和Comet?

我试过读一些文章,但我还不太清楚这些概念

是否有人想向我解释一下这些技术是什么:

  1. 长轮询
  2. 服务器发送事件
  3. 网袋
  4. 彗星

我每次遇到的一件事是,服务器保持连接打开,并将数据推送到客户端。连接如何保持打开状态,客户端如何获取推送的数据?(客户机如何使用数据,也许一些代码会有所帮助?)

现在,我应该在实时应用程序中使用哪一个。我已经听说了很多关于WebSocket(带有socket.io[node.js库])的事情,但是为什么不使用PHP呢

在下面的示例中,客户端是浏览器,服务器是承载网站的Web服务器。

在了解这些技术之前,您必须先了解经典HTTP web流量

常规HTTP:

  1. 客户端从服务器请求网页
  2. 服务器计算响应
  3. 服务器向客户端发送响应

Ajax轮询:

  1. 客户机使用常规HTTP(参见上面的HTTP)从服务器请求网页
  2. 客户端接收请求的网页并在页面上执行JavaScript,该页面定期(例如0.5秒)向服务器请求文件
  3. 服务器计算每个响应并将其发回,就像正常的HTTP通信一样

Ajax长轮询:

  1. 客户机使用常规HTTP(参见上面的HTTP)从服务器请求网页
  2. 客户端接收请求的网页,并在页面上执行JavaScript,该页面从服务器请求文件
  3. 服务器不会立即响应请求的信息,而是等待有新的可用信息
  4. 当有新信息可用时,服务器将用新信息进行响应
  5. 客户机接收到新信息并立即向服务器发送另一个请求,从而重新启动流程

HTML5服务器发送事件(SSE)/事件源:

  1. 客户机使用常规HTTP(参见上面的HTTP)从服务器请求网页
  2. 客户端接收请求的网页,并在页面上执行JavaScript,从而打开与服务器的连接
  3. 当有新信息可用时,服务器向客户端发送事件

    • 从服务器到客户机的实时流量,主要是您需要的
    • 您需要使用具有事件循环的服务器
    • 只有正确的CORS设置才能与其他域的服务器连接
    • 如果你想读更多,我发现这些非常有用:(文章),(文章),(文章),(教程)

HTML5 WebSocket:

  1. 客户机使用常规http(参见上面的http)从服务器请求网页
  2. 客户端接收请求的网页,并在页面上执行JavaScript,从而打开与服务器的连接
  3. 当新数据(在任意一侧)可用时,服务器和客户端现在可以互相发送消息

    • 从服务器到客户端的实时流量和从客户端到服务器的实时流量
    • 您需要使用具有事件循环的服务器
    • 使用WebSocket,可以从另一个域连接到服务器
    • 也可以使用第三方托管的websocket服务器,例如Pusher或其他服务器。这样,您只需实现客户端,这非常简单
    • 如果你想读更多,我发现这些非常有用:(文章),(文章)(教程)

彗星:

Comet是HTML5之前的一系列技术的集合,这些技术使用流和长轮询来实现实时应用程序。阅读更多关于维基百科或这篇文章


现在,我应该将其中哪一个用于实时应用程序(我需要这样做)
代码)。我已经听说了很多关于WebSocket(使用socket.io[a
但为什么不是PHP呢

您可以将PHP与WebSocket一起使用,请查看Ratchet

发表评论