1

我已经阅读了一些关于服务器端事件的内容,在我看来,SSE 和 Ajax 轮询之间的最大区别在于,在后者中,您应该在每次响应后自己查询服务器,而使用 SSE,浏览器会为您执行此操作。这是对的吗?

而且在服务器处理方面,SSE 和 Ajax Polling 几乎没有区别,只是以某种方式格式化响应并包含Content-type: text/event-streamheader 的细微差别?

4

2 回答 2

2

正如 Seabizkit 基本上所说,一种方法轮询服务器(尽可能多地),另一种方法发送消息(当服务器决定发送它们时)。

如果每天对某些数据进行一次更新,如果所有客户端每分钟检查一次,或者服务器向所有订阅该事件的人发送一次消息,你能看出会有什么不同吗?

在您的问题中,您问这是否正确:“SSE 和 Ajax 轮询之间的最大区别在于,在后者中,您应该在每次响应后自己查询服务器,而使用 SSE,浏览器会为您执行此操作”。对我来说,这意味着您基本上已经询问了浏览器是否正在为您执行请求。

Ajax Polling 要求数据 - 因此您可以定期检查它是否已更改等(类似于网页请求)。

仅当更改发生时,SSE 才会向所有想了解更改的人发送消息。

轮询不是在每次响应后进行查询,而是在您想要的时候查询您想要的次数(如果您愿意,每秒 10 次,100 次,1,000 次,无论您认为合适)。事件发生时发生,然后通知订阅者(希望只是一次)。

想象一下,如果我想知道我的包裹递送司机是否会在接下来的 30 分钟内出现。我可以每分钟打一次电话询问 - 如果我愿意,我可以整天这样做,或者司机可以打电话给我,让我知道他们在 30 分钟路程外。

您在对 Seabizkit 的评论中声明客户端发起通信。不,它没有。它为服务器上可用的事件添加事件处理程序。之后的通信是服务器向客户端发送消息,无论是 5 秒后,5 分钟后,还是每秒 50 次——客户端不再请求,它已经订阅了事件,每次都会收到通知它着火了。

请记住,这是一个一般性解释 - 不是技术性解释,因为您的问题在询问两者之间的区别时是相当开放的。

于 2015-10-18T19:20:34.320 回答
0

在浏览器的上下文中...

区别在于:一个轮询,另一个响应事件(*)。

轮询;在浏览器端启动。

提出请求...接收响应...做点什么。(通常会更改 UI)

  • 轮询很昂贵(相对于您正在做的事情!)。
  • 与在浏览器上处理服务器更改相比,轮询更容易设置。

服务器端事件/更改;在服务器上启动。

如何通知浏览器?

  • 开箱即用的浏览器无法响应服务端的更改。基本上浏览器不知道服务器上发生了什么。

你只能自己处理这件事。

幸运的是 SignalR 等库http://signalr.net/

可以用来为你简化很多。但是与简单的轮询页面相比,复杂度仍然很高。

它要求您处理“客户端”之间的套接字连接。

(*) = 一小撮盐,技术上措辞不正确。

如果这不能回答您的问题或者您想了解更多信息。

于 2015-10-18T07:34:11.740 回答