我正在尝试制作一个实时的socket.io应用程序。
redis连接很好,因为我可以修补一下,并且工作正常。
Redis::publish('test-channel','test-message');
但是我想使用事件来发布消息
app \ Events \ ChatMessage.php:
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class ChatMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $name;
public $message;
public function __construct($name,$message)
{
$this->name = $name;
$this->message = $message;
}
public function broadcastOn()
{
return ['test-channel'];
// return new Channel('test-channel');
}
}
在公共功能广播中
我尝试过
return ['test-channel'];
return 'test-channel';
return new Channel('test-channel');
所有方法都不起作用。
我会做些修补
event(new App\Events\ChatMessage('bear','banana'));
而laravel刚返回[]
我知道我可以使用监听器通过Redis :: publish()处理它, 但是大多数教程都不这样做。
我还需要检查什么?
答案 0 :(得分:0)
我发现即使我触发了该事件,消息也将排队。
我运行后
php artisan queue:listen
客户收到消息!
所以我通过将ShouldBroadcast更改为ShouldBroadcastNow来解决它,并且可以正常工作!