2016-12-13 3 views
1

Ist möglich, ein Laravel-Ereignis aufrufen und senden Sie eine Variable in socket.io?Aufruf laravel Ereignis innerhalb socket.io

Das ist die Linie, die ich möchte wissen, ob in Buchse Senden der Socket-ID möglich umzusetzen ist:

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'); 
    }); 
}); 

Ereignis 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']; 
    } 
} 

Oder was ist der beste Weg, die Socket-ID zu senden, um einen Datensatz in der Datenbank zu aktualisieren.

Dank

Antwort

1

Sie auf die beiden Repositories meiner eigenen ein voll funktionsfähiges Beispiel dafür, was Sie tun möchten, finden Sie unter:

https://github.com/bretanac93/socket_io_events_laravel

https://github.com/bretanac93/backend_io_events_laravel

Sie benötigen einen Redis-Server läuft und um die Abhängigkeiten zu konfigurieren und zu installieren, damit man das Projekt testen kann, befindet sich das Frontend im selben Repository des Backends, ist eine kleine Vue App, dort zeige ich in Echtzeit, wann Leute goe s verbunden und getrennt, es verwendet die LoggedIn, LoggedOut und RegisteredEvents, aber Sie können auch Ihre eigenen Events definieren, Hoffnung funktioniert für Sie dieses kleine Beispiel, Bests! ;)

PD: Vergessen Sie nicht, Sterne, wenn Sie es mögen, und stimmen Sie die Antwort XD.

Aktualisiert Frage

Sie in diesem Link kann die Zeile markiert, werden Sie feststellen, dass ich den Benutzer in der db ändern: https://github.com/bretanac93/backend_io_events_laravel/blob/master/app/Listeners/SuccessfullLogin.php#L30

Die Erklärung dafür: Sie haben immer ein Ereignis, das gesendet wird, aber Sie können auch einen EventListener definieren, wenn dieses Ereignis aufgerufen wird, müssen Sie nur diesen Listener auslösen, und alles in Ordnung, hier wird übersetzt, um zu hören, wenn sich ein Benutzer anmeldet, anmeldet oder abmeldet (in diesem (mindestens Projekt), wenn irgendeine dieser Aktionen geschieht, feuern Sie ihren eigenen Listener, der auf Ihrem EventServiceProvider.php definiert ist, wie hier: https://github.com/bretanac93/backend_io_events_laravel/blob/master/app/Providers/EventServiceProvider.php#L16

Beachten Sie, dass Sie Ihren Socket nur für die Kommunikation mit Ihrem Frontend verwenden, wenn einige dieser Aktionen ausgeführt werden, und das Backend die richtigen Ereignisse überwacht, wenn die Aktion gerade aufgerufen wird (zB: In einem Chatraum) Wenn ein Benutzer online oder offline reagiert, definieren Sie im Backend zwei Listener, einen für Log In und den anderen für Logout, wenn eines dieser Dinge passiert, heißt Event, das als Broadcast definiert ist, sendet der Socket Dieses Signal vom Backend zum Frontend, aber speichert die Änderung in der db, wenn Sie dieses Signal senden, und im Frontend ändern Sie in DOM eine Nachricht zwischen offline oder online).

Hoffe, dass Sie jetzt gut verstehen, wenn Sie mehr Hilfe benötigen oder wenn es auch etwas gibt, das Sie brauchen, zögern Sie nicht, zu kommentieren. Prost!;)

+0

Ich muss nur wissen, wenn ein Benutzer aus der Website, nehmen Sie ihre Socket-ID und aktualisieren Sie einen Datensatz in der Datenbank, ist sehr einfach, aber ich weiß nicht, wie das geht. : 'C, ich versuche mit der Objektanforderung innerhalb der socket.js-Datei, funktioniert aber nicht. –

+0

Wenn Sie diese Beispiele überprüft haben, dann werden Sie feststellen, dass Sie genau das tun wollen, auf jeden Fall, unten werde ich eine andere Antwort mit den Snippets XD veröffentlichen! – bretanac93

+0

Danke für Ihre Zeit, ich fand eine Lösung mit der Node-Anfrage-Bibliothek, Senden einer Anfrage an eine bestimmte URL mit der Socket-ID innerhalb der Socker-IO-Datei auf dem Server. Grüße –

Verwandte Themen