【问题标题】:Change channel dynamic with laravel,Socket and Redis使用 laravel、Socket 和 Redis 更改频道动态
【发布时间】:2018-04-17 20:20:42
【问题描述】:

!!! 服务端-socket如何改变通道动态

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

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

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

    }

【问题讨论】:

    标签: laravel-5 redis socket.io vuejs2


    【解决方案1】:

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

    class Message implements ShouldBroadcast{
        use SerializesModels;
    
        protected $channel;
    
        public function __construct($channel){
            $this->channel = $channel;
        }
    
        public function broadcastOn(){
           return [$this->channel];
        }
    }
    

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

    【讨论】:

    • 谢谢乔,我试过了,但是如何在服务器套接字中检索它redis.subscribe('channel'); redis.subscribe('*', function(err, count) {});
    • 你能帮我吗??
    • 您没有提供足够的上下文来回答如何在前端订阅动态定义的频道,但肯定只是将频道名称作为变量传递给您的视图然后在订阅函数中使用该变量。
    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2017-03-24
    • 2020-07-12
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多