用 Laravel 自帶訊息模組搭建小程式實時推送訊息

hans_real發表於2019-11-15

環境

服務端:laravel + laravel-echo-server + redis佇列 (broadcast)
客戶端: laravel-echo + socket.io

服務端環境搭建

(1)安裝redis庫 redis佇列用
(2)修改配置檔案.env中 redis、broadcast 為redis
(3)開啟配置app.php 中BroadcastServiceProvider 服務;因為私有頻道認證時會用到
(4)因為我們是通知,laravel提供內建命令make:notification生成訊息事件,當然廣播也是類似用法,具體可參考官方文件
(5)因為要把訊息傳送到佇列裡,所以訊息類裡要實現implements ShouldQueue
(6)laravel 官方訊息提供多種方式broadcast、mail、database、sms等,因為我們用的是broadcast廣播
(7)設定routes的channel.php;頻道按照User模型App.User.{id}
(8)控制器觸發訊息傳送(別忘了引入Notification)
(9)搭建laravel-echo-server,配置好,如果是https,需要指定證照目錄,啟動
(10)啟動佇列偵聽php artisan queue:work

用 Laravel 自帶訊息模組搭建小程式實時推送訊息

搭建客戶端小程式環境

(1)app.js引入echo和socket.io庫.檔案連結libs庫檔案github地址

const io = require('libs/weapp.socket.io.js')
const Echo = require("libs/echo.js")


在onLaunch中:新增:

that.globalData.laravelEcho = new Echo({
      broadcaster: 'socket.io',
      host: 'https://yourhost:6001',
    });

(2)訊息頁面新增,接收訊息程式碼:
app.globalData.laravelEcho.private('App.User.' + uid).notification((notification){
}
前端比較簡單。這樣就可以實時接收到服務端推送的訊息。
但是要注意設計到使用者認證的時候,記得服務端broadcast路由要加上對應的auth認證中介軟體,如果是第三方伺服器另外還要注意6001出網埠是否開啟。

相關文章