我已经阅读了一些关于服务器端事件的内容,在我看来,SSE和Ajax Polling之间的最大区别在于,后者你应该在每次响应后自己查询服务器,而使用SSE浏览器为您做到这一点。这是对的吗?
就服务器处理而言,SSE和Ajax Polling之间几乎没有区别,只是在某种程度上格式化响应并包括Content-type: text/event-stream
标题的细微差别?
答案 0 :(得分:2)
正如Seabizkit基本上所说,一种方法轮询服务器(尽可能多地),另一种方法发送消息(当服务器决定发送消息时)。
如果每天对某些数据进行一次更新,您是否可以看到如果所有客户端每分钟检查一次,或者服务器向所有已订阅该事件的所有客户发送消息会有什么不同?
在你的问题中你会问这是否正确:'SSE和Ajax Polling之间的最大区别在于,后者你应该在每次响应后自己查询服务器,而使用SSE时,浏览器会为你做这件事'。对我来说,这意味着你基本上已经问过浏览器是否正在为你做请求。
Ajax Polling要求提供数据 - 因此您可以定时检查它是否已更改等(类似于网页请求)。
SSE仅在发生更改时向所有想要了解更改的人发送消息。
每次回复后轮询都不会查询,它会根据您的需要随时查询(如果您愿意,每秒10次,100,1000,无论您认为合适)。 当事情发生时发生事件,然后通知订户(希望只有一次)。
想象一下,如果我想知道我的包裹递送司机是否会在接下来的30分钟内出现。 我可以每分钟拨打一次电话然后问 - 如果我愿意的话,我可以整天做这件事,或者司机可以打电话给我,让我知道他们在30分钟的路程之内。
您在对Seabizkit的评论中表示,客户端会发起通信。不,不。它为服务器上可用的事件添加了事件处理程序。之后的通信是服务器向客户端发送消息,无论是5秒后,5分钟后,还是每秒50次 - 客户端没有再次请求,它已订阅该事件并且每次都会收到通知火了。
请记住,这是一般性解释 - 不是技术性解释,因为您的问题在询问两者之间的区别时是相当开放的。
答案 1 :(得分:0)
在浏览器的背景下......
不同之处在于:一次民意调查,另一次民意调查(*)。
<强>轮询强>;在浏览器端启动。
提出请求......收到回复......做点什么。 (通常更改UI)
服务器端事件/更改;在服务器上启动。
如何通知浏览器?
你可以自己处理这个问题。
幸运的是诸如SignalR http://signalr.net/
之类的图书馆可以用来简化这一点。 但与使用民意调查的简单页面相比,复杂性仍然很高。
它要求您处理“客户端”之间的套接字连接。
(*)=少量盐,技术上没有正确措辞。
如果这不能回答您的问题,或者您想了解更多信息。