因專案需求核心功能對 WebSocket 高度依賴,所以調研了Larave支援比較好的驅動,Laravel 官方推薦了 Pusher、Ably 以及開源的 laravel-websockets 和 Soketi,前2個整合起來非常簡單,但是考慮網路延遲的原因放棄了。
最終選擇了 Soketi 提供 WebSocket 服務,主要原因還是考慮到效能(還沒有做壓力測試),而且還完全相容 Pusher v7 協議,官網介紹:
Soketi is your simple, fast, and resilient open-source WebSockets server
在阿里雲上配置了一個對外的服務,在開發過程中如果想做測試可以直接使用,我之前都是用 Pusher 做的測試,有時候網路延時的確很高,一點不穩定。
首先就是要安裝 composer require pusher/pusher-php-server
來支援推送。
具體的配置資訊和 pusher 稍有不同,主要就是自定義了 host 和 port 到自定義的伺服器,其他都是一樣的。
env 檔案
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=532232132
PUSHER_APP_KEY=DZIqMLJdGi633kB3BYHN
PUSHER_APP_SECRET=pelvQlQFJecoYWvVUbF8
PUSHER_APP_CLUSTER=ap3
PUSHER_HOST=pusher.qiyuankeji.cn
PUSHER_PORT=6002
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MIX_PUSHER_HOST="${PUSHER_HOST}"
MIX_PUSHER_PORT="${PUSHER_PORT}"
config/broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY', 'app-key'),
'secret' => env('PUSHER_APP_SECRET', 'app-secret'),
'app_id' => env('PUSHER_APP_ID', 'app-id'),
'options' => [
'host' => env('PUSHER_HOST', '127.0.0.1'),
'port' => env('PUSHER_PORT', 6001),
'scheme' => env('PUSHER_SCHEME', 'https'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME') === 'https',
],
],
resources/js/bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
wsHost: process.env.MIX_PUSHER_HOST,
wsPort: process.env.MIX_PUSHER_PORT,
wssPort: process.env.MIX_PUSHER_PORT,
forceTLS: false,
encrypted: true,
disableStats: true,
enabledTransports: ['ws', 'wss'],
});
配置好這些就可以直接使用 Echo 來監聽廣播了,爭取一直穩定的執行下去,後續做個免費申請獨立祕鑰的介面,就可以玩起來了。
本作品採用《CC 協議》,轉載必須註明作者和本文連結