laravel-5 - 使用 laravel、Socket 和 Redis 动态更改 channel

标签 laravel-5 redis socket.io vuejs2

!!! 服务器-套接字如何动态更改 channel

例如,当我使用/fire/1 广播时,我只想发送到/room/1。

目前它发送到/room/1、/room/2、/room/3 等。因为这里默认情况下,服务器上的所有内容都订阅了“test-channel”。我就是想不通。

var server = require('http').Server();

var io = require('socket.io')(server);

var Redis = require('ioredis');
var redis = new Redis();


io.on('connection', function(socket){
    console.log('New User Conected here');

 redis.subscribe('test-channel');

redis.on('message', function(subscribed ,channel, message) {
    console.log(channel);
    message = JSON.parse(message);

    socket.emit(channel + ':' + message.event, message.data);
});

socket.on('joinRoom', function(room ){

    console.log('Join in  this Room '+ room);
    socket.join(room);

    });

});
server.listen(3000);

    event | php


    public function broadcastOn()
    {

         return ['test-channel']; // static

    }

最佳答案

向您的广播事件添加一个属性,然后将其传递给构造函数。

class Message implements ShouldBroadcast{
    use SerializesModels;

    protected $channel;

    public function __construct($channel){
        $this->channel = $channel;
    }

    public function broadcastOn(){
       return [$this->channel];
    }
}

然后当你触发事件时,将 channel 传入:event(new Message($channel));

关于laravel-5 - 使用 laravel、Socket 和 Redis 动态更改 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49886820/

相关文章:

node.js - 即使在建立 Websocket 之后,Socket IO 仍保持(重新?)连接

node.js - 在 Node.JS 的类中使用 Socket.IO 回调的正确方法是什么?

javascript - 通过外部触发将数据推送到web socket

javascript - 如何使用 Javascript 调用路由并销毁数据库中的数据?

Laravel - CNAME + 子域路由

php - Laravel 5.1 中发送邮件的事件

php - Laravel API 路由由用户 session 进行身份验证

redis - Lettuce重连后会重新发送AUTH吗?

django - Docker&Celery - 错误 : Pidfile (celerybeat. pid) 已经存在

spring - 使用 Spring Security 对现有和不存在的用户进行时不变查询