Laravel echo-server

Laravel-echo-serverとは?

LaravelからWebSocketを利用する為のライブラリ

WebSocketを利用するとhttpリクエストを利用せずに、常時双方向通信が可能になる。
※Nodejs with socket.ioで作られたLaravel用 WebScoketサーバー

インストール

npm install -g laravel-echo-server
yarn install -g laravel-echo-server

初期化

laravel-echo-server init

対話形式による設定
? Do you want to run this server in development mode? Yes
? Which port would you like to serve from? 6001
? Which database would you like to use to store presence channel members? redis
? Enter the host of your Laravel authentication server. http://localhost/
? Will you be serving on http or https? http
? Enter the path to your SSL cert file. /etc/letsencrypt/live/localhost/fullchain.pem
? Enter the path to your SSL key file. /etc/letsencrypt/live/localhost/privkey.pem
? Do you want to generate a client ID/Key for HTTP API? No
? Do you want to setup cross domain access to the API? No
? What do you want this config to be saved as? laravel-echo-server.json

laravel-echo-server.jsonが作成される

laravel-echo-server.json

{
 ”authHost”: “http://localhost“,
 ”authEndpoint”: “/broadcasting/auth”,
 ”clients”: [],
 ”database”: “redis“,
 ”databaseConfig”: {
  ”redis”: {
   追記(dockerでredisコンテナ運用前提)
   ”port”: “6379“,
   ”host”: “redis-server“,
   ”options.db”: 2
  },
  ”sqlite”: {
   ”databasePath”: “/database/laravel-echo-server.sqlite”
  }
 },
 ”devMode”: true,
 ”host”: null,
 ”port”: “6001“,
 ”protocol”: “http“,
 ”socketio”: {},
 ”secureOptions”: 67108864,
 ”sslCertPath”: “”,
 ”sslKeyPath”: “”,
 ”sslCertChainPath”: “”,
 ”sslPassphrase”: “”,
 ”subscribers”: {
  ”http”: true,
  ”redis”: true
 },
 ”apiOriginAllow”: {
  ”allowCors”: false,
  ”allowOrigin”: “”,
  ”allowMethods”: “”,
  ”allowHeaders”: “”
 }
}

起動

laravel-echo-server start

Redis

Docker利用時

※docker-compose.yml
version: “3”
services:
 省略
 redis:
  container_name: redis-server
  image: redis:5.0-alpine
  volumes:
   - redis-store:/data

volumes:
 redis-store:

インストールする場合

composer require predis/predis

.env

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

LaravelからのBroadcast

config/app.php

App\Providers\BroadcastServiceProvider::class,

publicなEvent

class PublicEvent
{
 
 public function __construct(){}

 public function broadcastOn()
 {
  return new Channel(‘public-event’);
 }

 public function broadcastWith()
 {
  return [
   ’message’ => ‘PUBLIC’,
  ];
 }
}

ルーティング

Route::get(‘/publicevent’, function(){
 broadcast(new \App\Events\PublicEvent);
 return ‘public’;
});

Laravel-echo

Laravel-echo-server用クライアントライブラリ

インストール
npm install --save laravel-echo socket.io-client

関連

Socket.IO

WebSocketを含むリアルタイムWeb技術を扱う為のライブラリ

Websocket

Websocket」参照