2017-08-11 104 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代碼已經設置來管理。

相關問題