2016-12-13 6 views
1

laravelイベントを呼び出してsocket.ioに変数を送信することはできますか?socket.io内のlaravelイベントを呼び出す

これは私がソケットIDを送信ソケットに実装可能であるかどうかを知りたいラインです:

socket.emit('App\\Events\\ClosePlaySession', socket.id);

Socket.js

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server, {'pingInterval': 2000, 'pingTimeout': 5000}); 
var Redis = require('ioredis'); 
var redis = new Redis(); 

io.set('heartbeat timeout', 10); 
io.set('heartbeat interval', 4); 

server.listen(3000); 

io.on('connection', function (socket) { 
    console.log("new client connected " + socket.id); 

    socket.on('disconnect', function() { 
     socket.emit('App\\Events\\ClosePlaySession', socket.id); // This is possible? 
     console.log('client disconnected'); 
    }); 
}); 

イベントClosePlaySession.php

<?php 

namespace App\Events; 

use App\Events\Event; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 

// Repositories 
use wtv\Repositories\PlaySessionRepository; 

class ClosePlaySession extends Event implements ShouldBroadcast 
{ 
    use SerializesModels; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 
    public function __construct($socket_id) 
    { 
     $playSessionRepository = new PlaySessionRepository; 
     $playSessionRepository->closeSession($socket_id); 
    } 

    /** 
    * Get the channels the event should be broadcast on. 
    * 
    * @return array 
    */ 
    public function broadcastOn() 
    { 
     return ['closePlaySession']; 
    } 
} 

または、データベース内のレコードを更新するためにソケットIDを送信する最も良い方法は何ですか。あなたが何をしたいの私自身の完全に機能する例のこの2つのリポジトリに見つけることができます

おかげ

答えて

1

https://github.com/bretanac93/socket_io_events_laravel

https://github.com/bretanac93/backend_io_events_laravel

あなたはRedisのサーバーを実行する必要がありますあなたがプロジェクトをテストできるように依存関係を設定してインストールするには、フロントエンドはバックエンドの同じリポジトリにあります。ちょっとしたアプリです。そこには、人々がgoeをリアルタイムで表示していますLoggedIn、LoggedOut、およびRegisteredEventsを使用しますが、独自のイベントを定義することもできます。 ;)

PD:あなたが好きなら、星座を忘れずに答えを投票してください。

あなたは、このリンクで確認することができます。質問

を更新しました

、ラインがマークされ、あなたは私がデシベルでユーザーを変更することがわかります。そのためhttps://github.com/bretanac93/backend_io_events_laravel/blob/master/app/Listeners/SuccessfullLogin.php#L30

説明:あなたは、常にそのイベントを持っていますこのイベントが呼び出されたときにEventListenerを定義することもできます。このListenerを起動するだけでOKです。ここでは、ユーザーがログイン、サインアップ、またはログアウトするときにリスニングするように変換されますこれらのアクションのいずれかが発生した場合、あなたのEventServiceProvider.phpに定義されているリスナーを起動します。https://github.com/bretanac93/backend_io_events_laravel/blob/master/app/Providers/EventServiceProvider.php#L16

これらのアクションのいくつかが発生したときにフロントエンドと通信するためだけにソケットを使用していることに注意してください。バックエンドが火災を担当している場合、アクションを聞いている正しいイベントが今すぐ呼び出されますユーザーがオンラインまたはオフラインになったときに反射したい、バックエンドで2つのリスナーを定義します.1つはログイン用、もう1つはログアウト用、もう1つはブロードキャストとして定義されたイベントと呼ばれ、ソケットはフロントエンドでは、オフラインまたはオンラインの間のメッセージをフロントエンドで変更します。

もう少し助けが必要な場合や、必要なものがある場合は、お気軽にコメントしてください。乾杯!;)

+0

ユーザーがサイトから出て、ソケットIDを取得してデータベース内のレコードを更新するのを知る必要があるのは非常に簡単ですが、その方法はわかりません。 : 'C、socket.jsファイル内でオブジェクトリクエストを試行していますが、動作しません。 –

+0

あなたがそれらの例を確認したら、あなたはあなたがしたいと思うことが分かるでしょう。とにかく、私はスニペットXDで別の答えを発表します! – bretanac93

+0

あなたのお時間をいただき、ありがとうございます。私はノード要求ライブラリを使って、サーバー上のsocker ioファイル内のsocket_idを使って特定のURLにリクエストを送信しました。よろしく –

関連する問題