[英]laravel echo server with socket io and redis
我尝试使用 laravel-echo 服务器和 socket.io 创建实时应用程序,但客户端没有成为消息
这是我的代码:
.env
BROADCAST_DRIVER=redis
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=redis
配置/queue.php
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
配置/数据库.php
'redis' => [
'retry_after' => 90,
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
路线/频道.php
Broadcast::channel('messages', function() {
return true;
});
源代码/echo.js
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'socket.io',
host:'http://localhost:6001'
});
window.Echo.channel('messages')
.listen('.newMessage', (message) => {
debugger;
});
事件/MessagePosted.php
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class MessagePosted implements ShouldBroadcast {
use Dispatchable, InteractsWithSockets, SerializesModels;
protected $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastWith()
{
return [
'message' => $this->message,
];
}
public function broadcastAs()
{
return 'newMessage';
}
public function broadcastOn()
{
return new Channel('messages');
}
}
MessageController.php
public function post(Request $request)
{
event(new MessagePosted($request->get('message')));
}
Redis服务器安装完成,在redis-cli中PING命令返回PONG。 我使用 php artisan queue:work redis,但是从客户端发送消息后,队列中没有任何显示...客户端连接到 laravel-echo-server,返回:[14:04:17] - C3c8UUnTn9dvOPc9AAAA 加入频道:消息. 并处理 POST 请求
您正在收听.newMessage
但发送的是.App.Events.MessagePosted
。
更改 JS 中的 listen function 参数:
window.Echo.channel('messages')
.listen('.App.Events.MessagePosted', (message) => {
debugger;
});
首先你应该运行队列服务器来处理排队的事件,因为你实现ShouldBroadcast
,所以运行php artisan queue:listen
注意添加REDIS_CLIENT=predis
& REDIS_PREFIX=
到你的.env 文件并确保你安装了 predis/predis package. 并更改event(new MessagePosted($request->get('message')))
到MessagePosted::dispatch($request->get('message'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.