在服务器事件上向客户端发送信息

Posted

技术标签:

【中文标题】在服务器事件上向客户端发送信息【英文标题】:Send info to client on server event 【发布时间】:2012-05-08 15:44:25 【问题描述】:

我正在尝试将共享日历创建为网络应用程序。当有人在日历上添加事件时,我希望共享该日历的每个人也能看到该事件。当有人创建事件时,我制作了一个将数据发送到数据库的 ajax。有没有办法将事件从服务器发送到页面上在线并共享同一日历的其他客户端?我现在通过不断“刷新”数据库中的信息来做到这一点。 如果有人知道如何做到这一点,请告诉我。

【问题讨论】:

【参考方案1】:

希望网络服务器将信息“推送”回浏览器是一个由来已久的问题。处理这个问题的传统方法是让任何活跃的客户端(即那些仍然登录到您的应用程序并打开页面的人)定期不断地“轮询”服务器,以查看是否有任何新信息。在您的情况下,您可以让页面上的一些 JS 每 10 秒进行一次 AJAX 调用,以查看他们是否有任何应该注意的新日历事件。这确实会增加Web服务器的整体流量,所以适当地选择轮询时间 - 否则您将抓住您的Web服务器,因为它将花费所有时间处理这些“有什么新的时间?”大部分时间都没有的请求。

如果你想更前沿一点,你可以看看 html5 websockets。谷歌搜索“html5 websockets 教程”应该会给你很多资源。它们使用起来有点棘手,并且要求您运行支持它们的 Web 服务器(您可能是)。对于支持它的浏览器,您可以保持更长期的开放连接,然后您可以将数据从 Web 服务器推送回浏览器,并且您的 JS 将使用更新的信息捕获“onmessage”事件。将您指向 google 并不是试图给出更完整的答案,但是已经有许多优秀的教程在那里寻找 HTML websockets,您应该能够完成您想要做的事情。

【讨论】:

非常感谢 Rob,老实说我什至不知道从哪里开始,所以你指向谷歌“html5 websockets 教程”正是我所需要的。欢呼:)

以上是关于在服务器事件上向客户端发送信息的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 无法在 Chrome 和 Firefox 上向 Node 服务器发送消息

如何在 websocket 服务器上向特定用户发送消息

如何在 PHP 服务器上向客户端发送 WebSocket 关闭帧?

Discord Bot 可以在频道上向所有人发送消息吗

服务器客户端通信:长轮询、彗星和服务器发送事件 (SSE)

是否有事件或其他方式来处理用户在 Facebook Messenger 平台上向机器人发送的第一条消息?