<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Event\UserMessageCreated;
class UserController extends Controller
{
public function createMessage(Request $request)
{
$message = new App\Message($request->all());
$message->save();
broadcast(new UserMessageCreated($request->user(), $message));
}
}
<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class UserMessageCreated implements ShouldBroadcast
{
use SerializesModels;
public $user;
public $message;
public function __construct(App\User $user, App\Message $message)
{
$this->user = $user;
$this->message = $message;
}
public function broadcastOn()
{
return new PrivateChannel('user.'.$this->user->id);
}
}
Quelques précisions
Les évenements émis sont placés dans une file d'attente (queue)
Il faut choisir son driver: BDD, Redis, SQS, Beanstalk...
Par défaut c'est “sync” mais attention à l'impact sur les temps de réponse de l'application
Quelques précisions
Il faut aussi un driver de broadcast :
Pusher, Redis, Log, Null
Pusher ? C'est le seul driver de WebSocket !!
Et c'est un service SAAS payant...
Redis sert de passerelle vers d'autres solutions...
Pour une implémentation locale
Pas de solution en PHP pour l'instant...
Obligé de passer par un serveur de WebSocket en JavaScript :