2017-08-11 124 views
0

我有两个不同的Laravel 5.4应用程序,一个用于接收和管理订单的餐厅菜单系统,以及一个客户可以在其中下订单的网站。这两个应用程序运行在不同的服务器上(localy),这意味着,在我的(Windows)系统中,我一次只能运行一个应用程序(localhost:8000)。两者都使用相同的数据库表。我的问题是,当用户从网站下订单时,如何通知餐馆菜单系统,即向数据库中的订单表添加新行?我需要一个通知以及在表中自动生成新行,如下所示: Restaurant Menu System。我试过用JQuery Ajax来做,但失败了,因为没有什么可以在页面中触发ajax函数。尝试从here jQuery setInterval(),但它似乎是一个非常低效的方式,也给出了一个错误Uncaught SyntaxError: Invalid or unexpected token。我想像Facebook的通知一样顺畅。有没有包装或窍门可以做到这一点?从一个laravel应用程序发送通知到另一个

该网站看起来就像任何其他电子商务网站与购物车和结账系统,用户可以支付和下订单。任何线索表示赞赏。

+0

你有什么尝试,如果答案是什么,尝试看laravel回声,这正是你想要的实时通知 – milo526

+0

我认为Laravel回声仅适用于相同的应用程序,但不同的用户通知,因为任何教程与Echo相关在同一个应用中显示通知。 – kaustabh

+0

怎么没有触发ajax?他们不需要点击某些东西来订购它?你为什么不能使用它?如果你能弄清楚如何设置虚拟主机,那么你可以自己做一个大好的事情,这样你就可以同时运行这两个应用(或者使用Laragon来为你处理)。 – user3158900

回答

0

你有两个我能想到的选择。

一种是彗星技术,我相信Facebook使用或至少在一个点上使用。它基本上会打开与您的服务器的ajax连接,并且您的服务器偶尔会检查是否有任何更改,如果您的新订单发生了变化,以及何时会发生变化,将会适当地响应请求。什么可能看起来像一个非常基本的版本是...

while (true) { 
    $order = Order::where('new', 1)->first(); 

    if ($order !== null) { 
     $order->new = 0; 
     $order->save(); 
     return $order; 
    } 

    sleep(5); // However long you want it to sleep for each time it checks 
} 

当你打开这一个ajax连接,它只是要等待服务器的响应。当订单发出并且服务器最终响应时,你的ajax函数将得到响应,你需要做两件事。

  1. 显示订单,做任何其他处理你想要做就可以了
  2. 重新打开这将启动等待的过程中,连接再次

这种方法的缺点是它仍然是基本除了将逻辑移动到服务器之外的setInterval方法。这样做效率更高,因为最大的问题是它只是一个单一的请求,而不是很多,所以也许不是什么大不了的事情。优点是它非常简单。

第二种方法是我认为更多的工作,但它会更有效率。

https://laravel.com/docs/5.4/broadcasting

你或许不得不设置你的订单表中的事件,以便每当创建有什么,它会用广播接触到任何JavaScript代码已经设置来管理。

相关问题