Web 通知 (HTML5) - 它是如何工作的?

Posted

技术标签:

【中文标题】Web 通知 (HTML5) - 它是如何工作的?【英文标题】:Web Notifications (HTML5) - How it works? 【发布时间】:2013-10-31 09:40:21 【问题描述】:

我正在尝试了解 html5 Web Notifications API 是否可以帮助我,但我无法理解它是如何工作的。

我希望 user_a 能够在我的 web 应用程序中向 user_b 发送消息。

我希望user_b 收到通知。

网络通知 API 可以在这里提供帮助吗?它是否让我专门针对某个用户(而不是通知所有人网站已更新_?我看不出如何为一个人创建警报。

谁能帮我多理解一点?

【问题讨论】:

一些好的参考资料:developer.mozilla.org/en-US/docs/Web/API/notification、paulund.co.uk/html5-notifications 和 alxgbsn.co.uk/2013/02/20/… 抱歉,我已经阅读了所有这些内容,但它们并没有让我更接近于回答我的问题。 【参考方案1】:

通知 API 是客户端,因此它需要从其他客户端技术获取事件。在这里,请阅读:http://nodejs.org/api/。只是在开玩笑。 Node.js+socket.io 可能是最好的方式,您可以向一个或所有客户端发出事件(广播)。这是一个推动场景。或者每个用户都可以从服务器中提取他们的通知。

【讨论】:

【参考方案2】:

HTML5 Web Notifications API 使您能够显示应用程序生成的桌面通知。 您想要实现的是另一回事,网络通知只是您的场景的一部分。

根据你如何管理你的应用程序,为了聊天和消息传递的目的,如 humbolight 提到的,你应该研究 node.js。它将为您提供必要的后端来管理用户之间的消息发送和接收。

要通知用户他已收到一条消息,您可以在客户端选择 ajax 轮询。 只需创建一个每 x 秒 ping 一次服务器的 javascript,并检查是否有任何通知或新消息可供该用户使用。 如果响应成功,那么您可以使用 HTML5 通知 API 向用户显示一条消息,表明他有一条新消息。 长轮询的主要问题是服务器负载和带宽使用,即使没有消息,如果用户数以千计,那么您的服务器总是忙于响应轮询调用。

另一种方法是使用服务器发送事件 API,您可以在其中向服务器发送请求,然后服务器将通知/消息在可用时立即推送到客户端。 这减少了不必要的客户端->服务器轮询,在您的情况下似乎是更好的选择。 要开始,您可以在以下位置查看一个很好的教程 HTML5Rocks

【讨论】:

【参考方案3】:

您正在寻找的是WebSocket。该技术允许客户端(浏览器)打开与服务器的持久连接并随心所欲地从服务器接收数据,而不必“轮询”服务器以查看是否有任何新内容。

这里的其他答案已经提到了node.js,但 Node 只是在您的服务器上实现 websocket 的一个(尽管可以说是最好的)选项。您可能还喜欢Ratchet,这是一个用于 php 的 websocket 服务器库,或者Tornado,它是 Python 中的。

您如何处理实时通信取决于您。 Websocket 只是您可以用来来回传递数据的底层技术。客户端将相当容易,但在服务器端,您需要一种机制让 websocket 处理程序相互获取信息。使用ZeroMQ 等工具处理队列,使用Memcached 或Redis 处理不需要永久存储的大量数据。

【讨论】:

以上是关于Web 通知 (HTML5) - 它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HTML 5 通知 - Web API 发送、安排通知?

Asp.Net MVC 和 HTML5 PUSH 通知

Android 推送通知关闭:它是如何在内部工作的?

HTML5 Web 应用程序中的推送通知/消息

为 HTML5 Django Web 应用程序实现实时通知系统

允许 HTML5 Web 应用在浏览器未聚焦时访问位置 (iOS)