2017-02-23 4 views
1

このパッケージ(https://github.com/tlaverdure/laravel-echo-server)を使用している小さなLaravel Echo Serverセットアップがあります。私は次のセットアップを持っています:Laravelエコーサーバークライアントがイベントを受信して​​いません

// app.js 

import Echo from "laravel-echo"; 

window.Echo = new Echo({ 
    broadcaster: 'socket.io', 
    host: 'http://vaprobash.dev:6001' 
}); 

window.Echo.channel('documents-sharing') 
    .listen("Api\\DocumentShared", (event) => { 
    console.log(event); 
}); 

です。

// server.js 
var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var Redis = require('ioredis'); 
var redis = new Redis(); 

http.listen(3000, function(){ 
    console.log('Listening on Port 3000'); 
}); 

redis.subscribe('documents-sharing', function(err, count) { 
    console.log("subscribed " + count); 
}); 

redis.on('message', function(channel, message) { 
    message = JSON.parse(message); 

    console.log('Message Received: ', channel, message); 

    console.log(io.to(channel).emit(message.event, message.data)); 
}); 

// laravel-echo-server.json 
{ 
    "authHost": "http://localhost", 
    "clients": [ 
     { 
      "appId": "986bb8954bb1e2e9", 
      "key": "58ca6a205718590ad5fd88a1afc1877c" 
     } 
    ], 
    "database": "redis", 
    "databaseConfig": { 
     "redis": { 
      "port": "6379", 
      "host": "localhost" 
     }, 
     "sqlite": { 
      "databasePath": "/database/laravel-echo-server.sqlite" 
     } 
    }, 
    "devMode": true, 
    "host": "localhost", 
    "port": "6001", 
    "protocol": "http", 
    "socketio": {}, 
    "sslCertPath": "", 
    "sslKeyPath": "" 
} 

// DocumentShared.php 
class DocumentShared implements ShouldBroadcast, ShouldBroadcastNow 
{ 
    use SerializesModels, InteractsWithSockets; 
    /** 
    * @var User 
    */ 
    public $user; 
    /** 
    * @var Resource 
    */ 
    public $resource; 
    /** 
    * @var Share 
    */ 
    public $share; 

    /** 
    * Create a new event instance. 
    * 
    * @param User $user 
    * @param Resource $resource 
    * @param Share $share 
    */ 
    public function __construct(User $user, Resource $resource, Share $share) 
    { 
     $this->user = $user; 
     $this->resource = $resource; 
     $this->share = $share; 
    } 

    public function broadcastOn() 
    { 
     return new Channel("documents-sharing"); 
    } 
} 

。その後

// app.blade.php 
<script src="{{ asset('js/socket.io.min.js') }}"></script> 
<script src="{{ asset('js/home.js') }}"></script> 

私が実行します。

gulp watch 
redis-server 
node server.js 
laravel-echo-server start 
php artisan queue:listen 

/notifyルートがヒットしたとき、私はイベントを発生。

Route::get('notify', function() { 
    $user = User::first(); 
    $resource = Resource::first(); 
    $share = Share::first(); 

    event(new DocumentShared($user, $resource, $share)); 

    return 'done'; 
}); 

サーバーがイベントを受信し、キューに表示されていないことがわかります。

terminal output

+0

'monitor'コマンドでRedisに何か起こっていることがありますか? – Robert

+0

はい、イベントが正しく受信されました。私はこれがフロントエンドで何かだと思うか、何かが足りない! –

+0

'window.Echo.channel()'を 'Echo.channel()'に変更する方法はありますか? – Robert

答えて

0

問題は、ポートが応答していなかったため、クライアント側がサーバーに接続できませんでしたということです。皮肉なことに、私はちょうどlaravel-echo-server.json設定ファイルからhost鍵を削除し、サーバを再実行しました。すべてが魅力的に機能しました!

関連する問題