如何在不同计算机上的用户之间共享网站上的实时更新?

Posted

技术标签:

【中文标题】如何在不同计算机上的用户之间共享网站上的实时更新?【英文标题】:How to share real time updates on a website between users on different computers? 【发布时间】:2012-05-25 12:38:21 【问题描述】:

我正在尝试为网站用户(例如学生和教师)找出一种方法来共享安全连接,让他们俩都可以查看一个页面上的实时更新。 通过研究,我得出结论,可以使用 ajax 和 javascript 执行一些实时更新。

但我不知道用户如何共享一个只有两个用户才能查看网站上发生的更新(例如绘图板的 Flash 动画)的连接。我也很困惑你是怎么做到的甚至会开始建立这样的连接。

我查看了 intp php 会话和 cookie,但我不确定我所做的研究是否正确。 关于两个特定用户如何共享安全连接的任何指针,其中实时更新仅由他们两个人查看。我不想要一个简洁的回应。我正在寻找特定的细节,例如特定于 php 的函数和语法。感谢您的帮助,如果您给我好的答案,我会给您打分!

【问题讨论】:

您是否正在寻找类似 Google Docs 的东西,用户可以在其中实时查看其他人所做的更改?还是一些共享屏幕应用程序?您必须更具体地说明您想要实现的目标...... 【参考方案1】:

您不能将一个客户端共享到一个服务器的安全连接(例如 HTTPS)。

如果两个客户端都登录并在浏览器中运行后台 AJAX 任务,是否可以让每个客户端每隔几秒“拉”一次相同的数据以显示给两个用户?

这将需要“绘图板”更新也不断发送回服务器,以便与其他客户端共享更新的数据。我敢肯定会有一个事件可以用来触发数据的发布(例如鼠标向上)。

如果性能是一个问题,您会希望使用更好的服务器技术,例如 Java,该技术能够在请求之间保持会话状态,而无需持久化到数据库。

【讨论】:

【参考方案2】:

您可以查看 ajax 推送技术。我曾经使用过彗星,管理员发布消息,每个登录的人都看到该消息出现在他们的屏幕上。我不知道彗星是否支持PHP。我只将它与 JSP 一起使用。只需在 Google 中搜索“ajax push”即可。

【讨论】:

【参考方案3】:

Flash 允许用户之间的连接,我认为他们将它们称为套接字。 如果你想使用Ajax等,你需要一个支持推送的服务器端技术。 Node是这方面的标准,你可以免费设置一个Heroku实例。

还有其他的,你需要在开始学习应用程序之前学习工具。

在众多概述中,您可能会对以下内容感兴趣:http://arstechnica.com/business/2012/05/say-hello-to-the-real-real-time-web/?1

【讨论】:

【参考方案4】:

发生这种情况的几个很好的例子:

Google Docs Etherpad html5 Games: Multi player

您可以使用的技术(不同的浏览器支持)

HTML5 WebSockets (Wikipedia; MDN; HTML5 Demo) 彗星 (Wikipedia)

据我所知,只有使用 WebSockets 才能真正将数据从服务器推送到 Web 浏览器客户端(当它从另一个客户端接收到内容时会这样做)。其他机制需要浏览器插件或独立应用程序。

但是,使用 Comet(通过 AJAX),您可以通过定期轮询服务器以获取数据,从而真正接近推送数据。然而,与传统的轮询(例如,客户端每 5 秒请求一次数据)相反,根据 Comet 原则,服务器将持有该周期性请求作为人质长达 30 秒。服务器将不会发回数据,直到它有数据或达到超时。这样,在这 30 秒内,服务器接收到的任何数据都可以立即推送回其他客户端。之后,客户端开始一个新的 30 秒会话,依此类推。

虽然 Comet 和 WebSockets 都应该与 Apache 提供的 PHP 后端一起工作。我建议为此研究 NodeJS(作为服务器技术)。

互联网上有很多关于彗星的信息,我建议你google一下,也许从***开始。

Comet 的伟大之处在于它更像是一种原理,而不是一种技术。它使用我们已有的东西(使用 AJAX 的简单 HTTP 请求),因此浏览器支持非常广泛。

您也可以进行组合,在支持的情况下使用套接字并回退到 Comet。

【讨论】:

【参考方案5】:

我相信你已经调查过了。认为这可以通过 ajax 完成的观点是误导性的,认为网站的两个用户可以通过 javascript 进行通信。

如您所知,javascript 发生在客户端上,而 ajax 本质上是“与服务器对话,无需更改或刷新页面”。

网站的两个用户之间的通信必须通过服务器 - php 和一些选定的数据存储进行。

希望这不是简洁。 干杯,罗伯

【讨论】:

以上是关于如何在不同计算机上的用户之间共享网站上的实时更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地机器上的 2 个流星应用程序之间可靠地共享 mongo 数据库?

如何在属于不同类的不同线程之间共享数据?

共享 XCode 配置文件以在多台计算机上构建 [关闭]

在不同端口之间共享 Cookie

在同一网络上不同计算机上运行的进程之间进行通信的推荐方式

如何访问网络计算机另一用户名下的共享文件夹?