Laravel 如何使用 Docker 快速架起 Echo Server(上)

leochien發表於2018-04-05

最近因為平臺需要做即使聊天,因此嘗試自己架 Echo Server。其實我們之前已經有用 Pusher 來做一些需要 Socket 的功能,但若要做即時聊天需考量成本,因此這次決定自己架 Echo Server 來節省費用。

本篇將示範如何使用 Laradock 快速架好 Echo Server,並傳送即時訊息,在開始前,請先對 Docker 及 WebSocket 有基礎的認識,及瞭解如何使用 Redis 作為 Laravel 的 Queue Driver。


系統需求:

  • Docker
  • Docker Compose
  • Laravel 5.6

首先建出一個空的 Laravel 專案,詳細方法請參考 官方檔案

$ laravel new echo
$ cd echo

這次我們使用 Laradock 來快速建立專案,但本篇不會太深入講解 Laradock 使用方法,有興趣的同學請看官網示範

$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
$ cp env-example .env

啟動 Laradock,並進入 container 內安裝 Laravel 必要環境

$ docker-compose up -d php-worker laravel-echo-server nginx redis
$ docker-compose exec --user=laradock workspace bash
$ composer install && npm install

接著,我們開啟瀏覽器,並訪問 http://localhost 就可以看到 Laravel 已經成功啟動

到這邊為止,我們已經做完基本的環境配置

接著我們要針對 Laravel 的廣播系統進行配置,首先修改專案根目錄下的 .env,將 queue 及 broadcast driver 改為 Redis,並修改 REDIS_HOST

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=redis

參考 官方檔案,我們還需安裝 predis 套件

$ composer require predis/predis

試著建立一個 Event 以測試廣播能否正常執行

$ php artisan make:event BroadcastEvent

開啟 app/Events/BroadcastEvent.php ,我們將 BroadcastEvent Class 繼承 ShouldBroadcast 類,Laravel 將會自動為我們廣播本事件

...
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class BroadcastEvent implements ShouldBroadcast
{
...

開啟 routes/web.php ,在訪問 / 時觸發此事件

Route::get('/', function () {
    // 加入以下程式碼來觸發 Event   
    event(new \App\Events\BroadcastEvent());
    return view('welcome');
});

這時開啟瀏覽器,訪問 http://localhost/ 就可以向 Redis 註冊此事件,這裡我使用 Medis 連結 redis,檢視事件註冊結果

在這個步驟若沒看到東西是正常的,因為這個事件註冊後很快就會被 Laravel Queue 執行並刪除,因此會看到事件很快出現又很快消失,想看到事件被註冊的過程手速要快。


上篇就到這邊,總結一下我們學到的:

  1. 使用 Laradock 作為 Laravel 開發環境
  2. 建立並觸發 Laravel Broadcast Event
  3. 使用 Medis 圖形化介面管理 Redis

下篇 會用 Vue.js 作為前端框架,從前端傳送訊息及接收廣播。

部落格文章: https://bit.ly/2HcQTXZ

簡永哲 Leo Chien
IT Manager | 大師鏈 MasterChain
E: leo@masterchain.media

相關文章