在Laravel 5.2.37中将信息从一个浏览器发送到另一个浏览器

时间:2016-06-21 20:53:44

标签: php laravel laravel-5 laravel-5.1 laravel-5.2

我有一个页面,用户可以在其中添加/更新记录。代码用Laravel 5.2编写

我们说我在Chrome中打开了添加/更新页面,并在FireFox中打开了相同的网址。因此,如果用户在Chrome浏览器中创建新记录,则应立即向Firefox收到信息。因此,我不需要向服务器发送基于ajax的请求以显示完整列表。

我的问题是,我应该从哪里开始呢?是否有任何博客可以逐步完成?

5 个答案:

答案 0 :(得分:10)

您肯定需要使用WebSockets来实现它。 tiagoRL的答案有几个很好的联系。但是,既然你说你使用的是Laravel 5.2,我强烈建议你播放活动。如果您是Laracasts用户,请查看相关视频。

基本上这是主链接:

https://laravel.com/docs/5.2/events#broadcasting-events

另外,为了简化服务器端的东西,我会选择Pusher

答案 1 :(得分:3)

要在两个或更多客户端之间进行此类实时消息传递,您需要使用套接字。一种选择是使用AJAX池,但如果你想要实时,那么使用套接字。

使用套接字,您可以在许多客户端之间创建连接隧道,但是仍然需要服务器实现。由于持久连接的这种性质,您需要一个可以同时支持许多连接的服务器体系结构,这就是NodeJS非阻塞IO的原因,例如,使用比PHP更少的资源。 有关这方面的更多信息,请访问:http://www.html5rocks.com/en/tutorials/websockets/basics/

在客户端,有 websockets ,这是 HTML5兼容浏览器中实现的功能。

参考文献:

答案 2 :(得分:3)

这是非常正常的事情,是通过AJAX后台轮询实现的。你可以做到

假设

  • 如果必须对用户进行身份验证以查看该页面,则在两个浏览器中都会登录同一用户。
  • 需求低,因此服务器负载最小。
    • 如果不是这样,请查看网络套接字。

结构

  • 页面路线(您已经拥有)
  • 路由返回行
    • 所有行
    • 从某一点开始的行

因此页面加载并检索所有行,无论是服务器端还是客户端。将最后一行ID设置为JavaScript变量。然后将AJAX调用设置为计时器。 AJAX调用发送页面上已有的最后一行,如果返回新行,则更新最后一行变量。或者,您可以使用时间戳来跟踪哪些行是新的。

答案 3 :(得分:2)

无法在不同浏览器之间共享会话或Cookie。 您的问题也与编写项目的编程语言/框架无关。 我建议你的方法是定期调用ajax来获取新添加的行,以便将它们前置或附加到当前列表。

这样,您可以节省大量资源和时间,而无需刷新整个列表。 虽然我从来没有使用它,但如果你喜欢持久连接而不是套接字I / O是你应该遵循的方式。

您可以查看以下页面,了解有关ajax或套接字I / O比较的更多信息。 http://www.cubrid.org/blog/cubrid-appstools/nodejs-speed-dilemma-ajax-or-socket-io/

我希望它可以帮到你。

答案 4 :(得分:2)

你可以从这开始:

Step by Step Guide to Installing Socket.io and Broadcasting Events with Laravel 5.1 using Laravel Homestead

此示例显示如何使用实时事件。

您的情况是在保存或更新新记录时发送事件,当其他人收到此事件时,刷新记录列表。