Push API 和 Server Sent Events 有什么区别?

What is the difference between Push API and Server Sent Events?

从文档中我可以看出 Push API and Server Sent Events 两者都是半双工的,但为什么要使用两种不同的技术来实现相同的功能呢? Push API有没有更重要的东西?

推送 API 允许服务器向客户端发送通知,即使您的站点未打开,因为它依赖于服务工作者。

只要用户使用您的站点,SSE(或 WebSockets)就可以工作。

ServiceWorker CookbookWeb Push 部分中有一些示例(带文档)可以帮助您更好地理解这一点。

您使用 Server Sent Events 直接连接到您的网站,相当简单。

Web 推送技术要复杂得多,用户的浏览器与浏览器供应商的推送服务器保持一个连接,该服务器收集并传送来自网站的所有推送(多路复用)。由于消息通过第三方服务器,因此应该对其进行加密。要使用 Push API,您(在客户端)获取浏览器特定供应商的端点 URL,生成 public 加密密钥,并将其发送回您的服务器以供使用。然后在您的服务器上,当您想要推送时,您使用密钥加密消息并将其推送到端点。

General info on Web Push

Firefox maintains an active connection to a push service in order to receive push messages as long as it is open.

这是 Web Push 的主要优点 - 您可以在用户打开浏览器时发送通知,他不必访问您的网站。缺点是您需要获得用户对此订阅的许可。另一个缺点是它目前还远未广泛supported

Technical info on Push API