Проверьте, подключен ли кто-либо к Socket Channel на контроллере Laravel. - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть такая структура:

Сокет на стороне сервера:

    var fs = require('fs');
    var pkey = fs.readFileSync('../../../../etc/letsencrypt/privkey.pem');
    var pcert = fs.readFileSync('../../../../etc/letsencrypt/cert.pem')
    var options = {
        key: pkey,
        cert: pcert,
        requestCert: false,
        rejectUnauthorized: false
    };
    var app = require('https').createServer(options);
    var io = require('socket.io')(app);
    var Redis = require('ioredis');
    var redis = new Redis();
    app.listen(8443, function () {
        console.log('Server is running!');
    });

    redis.subscribe('resumo');

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

        console.log(channel+':'+message.event, message);
        io.emit()
    });

    function handler(req, res) {
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.writeHead(200);
        res.end('');
    }

    var totalUsers = 0;

    io.on('connection', function (socket) {
        totalUsers++;
        console.log('a user connected');
        io.emit('users', totalUsers);
        socket.on('disconnect', function(){
            totalUsers--;
            io.emit('users', totalUsers);
            console.log('user disconnected');
        });
        socket.on('exit', function(channel){
            var teste = socket.eventNames();
            console.log('desconectado de: '+teste);
        });
        socket.on('entrar', function(channel){
            socket.join(channel);
            console.log('conectado em: '+channel);
        });
    });
    redis.psubscribe('*', function (err, count) {
        //
    });
    redis.on('pmessage', function (subscribed, channel, message) {
        io.emit(channel, message);
    });

На стороне клиента:

    var socket = io.connect('https://mywebsite.com:8443/');
    socket.on('u_123', function (data) {
        data = JSON.parse(data);
        window[data['function']](data);
    });

И я публикую на таких каналах, какэто:

    Redis::publish('u_123', json_encode([
        'data' => [somedata]
    ]));

Мне нужно проверить, есть ли кто-то, подключенный к этому каналу 'u_123' на контроллере laravel, это возможно?Как я мог это сделать?Я действительно плох в части JavaScript, поэтому у меня много трудностей с этим ...

1 Ответ

0 голосов
/ 19 февраля 2019

в соответствии с документацией по socket.IO

Каждый Socket в Socket.IO идентифицируется случайным, не угадываемым уникальным идентификатором Socket # id.Для вашего удобства каждый сокет автоматически присоединяется к комнате, идентифицируемой этим идентификатором.

Таким образом, вы можете хранить эти идентификаторы в массиве для события connection, а в exit вы можете удалить его изсписок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...