Aus welchem Grund auch immer, ich kann keine Daten auf meiner Client-Seite von Laravel Echo erhalten. Ich benutze Laravel-Echo-Server (Socket.io), Redis Broadcaster und Redis-Warteschlangen. Soweit ich das beurteilen kann, sind sie alle funktional. Ich werde Ihnen zeigen, wie ich es zum Testen eingerichtet habe. Zuerst habe ich eine nutzererzeugte Ereignis erstellt:Laravel Echo nie erhalten Ereignis
class UserCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new Channel('user-created');
}
public function broadcastAs()
{
return 'user.created';
}
}
Dann dieses Ereignis zu testen, habe ich eine AngelegtVon Befehl erstellt:
class CreateUser extends Command
{
protected $signature = 'create:user {username}';
protected $description = 'Create a new user!';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$user = \Chatter\User::create([
'name' => $this->argument('username'),
'email' => uniqid() . '@gmail.com',
'password' => bcrypt('secret')
]);
event(new \Chatter\Events\UserCreated($user));
}
}
Schließlich ist hier mein Laravel-Echo-server.json:
{
"authEndpoint": "/broadcasting/auth",
"authHost": "chatter.dev",
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "localhost"
}
},
"port": 6001,
"protocol": "http",
"sslCertPath": "",
"sslKeyPath": "",
"socketio": {}
}
Als nächstes lief ich und laravel-echo-server start
. Beide liefen ohne Fehler. Um sicherzustellen, dass der Server funktioniert, habe ich php artisan create:user Bob123
. Es war erfolgreich. Die Warteschlange zurückgegeben diese (in der Konsole):
[2017-06-01 01:28:27] Processing: Chatter\Events\UserCreated
[2017-06-01 01:28:27] Processed: Chatter\Events\UserCreated
Und den Laravel-Echo-Server dieses zurückgegeben (in der Konsole):
CHANNEL user-created
, so dass die Daten erhalten ich mit dem Benutzer gesendet, ich erstellt eine Vue-Komponente mit einem Echo-Listener in der angehängten Funktion. Hier ist meine Komponente:
<template>
<div class="container">
<div class="row">
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Component mounted.');
window.Echo.channel('user-created')
.listen('.user.created', (data) => {
console.log(data);
});
},
data(){
return {
messages: []
}
}
}
</script>
Wenn ich meine Webseite aktualisiert, Component mounted
an der Konsole angemeldet wurde, damit ich sicher bin, dass es geladen. Aber aus welchem Grund auch immer, wenn ich den CreateUser-Befehl sende, werden die Daten nicht in der Browser-Konsole eingeloggt.
Hier ist alles, was Sie darauf hinweisen könnte:
ich meine Sendung Treiber geändert, um Redis meine .env
BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
ich unkommentiert auch die BroadcastingServiceProvider in der app.php Konfig.
Ich kann jetzt nicht an etwas anderes denken, dass Sie vielleicht darauf hinweisen, dass ich getan habe, aber wenn ich mich an andere erinnere, werde ich die Frage aktualisieren.
Danke für jede Hilfe.
Hinweis: Ich bin mit Redis nicht vertraut, daher lehne ich mich derzeit dem Problem an. Einfach predis\predis
als Abhängigkeit hinzuzufügen, fühlt sich einfach nicht so an, als wäre das alles, was ich tun muss. Hoffentlich hilft diese Notiz.
Edit:
Wie bereits angedeutet, ich versuchte, läuft redis-server
bevor ich Laravel-Echo-Server lief. Dies ist, was in der Konsole zurückgegeben wurde:
[email protected]:~/Code/Chatter$ redis-server
16342:C 01 Jun 05:45:38.066 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
16342:M 01 Jun 05:45:38.067 * Increased maximum number of open files to 10032 (it was originally set to 1024).
16342:M 01 Jun 05:45:38.067 # Creating Server TCP listening socket *:6379: bind: Address already in use
Ich nehme an, dies bedeutet, dass der redis Server ausgeführt wurde, so dass ich denke, Heimstätte startet es automatisch in der Standardeinstellung.
Github Repository:
Leider dauerte das so lange, ich war persönlich sehr beschäftigt. Hier ist der Link zum github-Repository für dieses Projekt. Wenn Sie Fragen zum Repository haben, lassen Sie es mich wissen.
https://github.com/Dastur1970/laravel-echo-test
Edit 2:
Nur falls jemand es braucht, hier ist mein der Code habe ich meine Echo
Instanz zu erstellen.
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
// auth: {
// headers: {
// 'Authorization': 'bf242984230eb684 1076b91e572e5bbcc81a852471364c49'
// }
// },
// key: '1076b91e572e5bbcc81a852471364c497',
// csrfToken: token.content
});
Kommentierte einige der Sachen, mit denen ich getestet habe. Ich war mir nicht sicher, ob ich das wieder brauchen würde und ich ließ sie einfach kommentiert. Lassen Sie mich wissen, ob einer der kommentierten Codes hilfreich sein kann.
Ihr redis Server vor Laravel-Echo-Server gestartet werden soll –
@NehalHasnayeen Könnten Sie bitte auf erarbeiten, wie ich dies tun könnte? – Dastur
Sie führen 'redisis-server' zuerst aus und wenn es läuft, dann starten Sie den' laravel-echo-server' –