SSE和Ajax轮询在浏览器中执行查询而不是js代码的区别

Difference between SSE and Ajax Polling in browser doing queries instead of js code

本文关键字:js 代码 区别 查询 执行 Ajax 浏览器 SSE      更新时间:2023-09-26

我读过一些关于服务器端事件的文章,在我看来,SSE和Ajax轮询之间最大的区别在于,在后者中,您应该在每次响应后自己查询服务器,而SSE则由浏览器为您完成。对吗?

在服务器处理方面,SSE和Ajax Polling之间几乎没有区别,只有以某种方式格式化响应和包括Content-type: text/event-stream标头的微小差异?

正如Seabizkit所说,一种方法轮询服务器(它想要多少),另一种方法发送消息(当服务器决定发送消息时)。

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

在你的问题中,你问这是否正确:"SSE和Ajax轮询之间最大的区别是,在后者,你应该在每次响应后查询服务器自己,而SSE浏览器为你这样做。"对我来说,这意味着你基本上是在问浏览器是否在为你做请求。

Ajax轮询请求数据-所以你可以检查它是否已经改变等(类似于网页请求)在一个定时的基础上。

SSE仅在发生更改时向所有想要知道更改的人发送消息。

轮询不是在每个响应之后查询,而是在您需要的时候查询您想要的次数(如果您愿意,每秒10次,100次,1000次,您认为合适的任何次数)。当某件事发生时,就会发生事件,然后通知订阅者(希望只有一次)。

想象一下,如果我想知道我的包裹快递司机是否会在30分钟内出现。我可以每分钟打一次电话问一下——如果我愿意的话,我可以一整天都这样做,或者司机可以直接打电话告诉我他们30分钟后到。

你在给Seabizkit的评论中说客户端发起通信。不,不是的。它为服务器上可用的事件添加事件处理程序。之后的通信是服务器向客户端发送消息,无论是5秒后,5分钟后,还是每秒50次-客户端不再请求,它已经订阅了该事件,并且每次触发时都会收到通知。

请记住,这是一个一般的解释,而不是一个技术上的解释,因为你的问题是相当开放的,询问两者之间的区别。

在浏览器的上下文中…

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

轮询;在浏览器端启动。

提出请求…得到回应……做点什么。(通常改变UI)

  • 轮询是昂贵的(相对于你正在做的!)。
  • 与在浏览器上处理服务器更改相比,轮询的设置要容易得多。

Server side Events/Changes;在服务器端启动。

如何通知浏览器?

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

你可以自己处理这件事。

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

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

它要求你处理"客户端"之间的套接字连接。

(*) =一小撮盐,严格意义上说,这是错误的。

如果这还没有回答你的问题,或者你想要更多的信息,请询问。