WebRT C & Socket.IO переходит в одну комнату таким образом, хорошо? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть работающее приложение видеочата, которое использует WebRT C | Socket.IO | Node.js.

Я следовал примеру, который нашел на github. Теперь, посмотрев весь код и попытавшись понять его, я заметил что-то неправильное или неправильно понимаю.

Это соответствующий код сервера:

'use strict';

var os = require('os');
var nodeStatic = require('node-static');
var http = require('https');
var socketIO = require('socket.io');

var fs = require('fs');
var options = {
    key: fs.readFileSync('../../wwwssl/certi.key.pem').toString(),
    cert: fs.readFileSync('../../wwwssl/certi.pem').toString()
};

var fileServer = new(nodeStatic.Server)();
var app = http.createServer(options, function(req, res) { 
  fileServer.serve(req, res);
}).listen(8443); // was 443 

var roomNow;
var clientsArray = {};

var io = socketIO.listen(app);

io.sockets.on('connection', function(socket) {

    // convenience function to log server messages on the client
    function log() {
        var array = ['Message from server:'];
        array.push.apply(array, arguments);
        socket.emit('log', array);
    }

    socket.on('message', function(message) {

        socket.to(roomNow).emit('message', message);
        console.log('message | roomNow: ' + roomNow + ' message: ' + message);

    });

    socket.on('create or join', function(room) {

        roomNow = room;

        if(clientsArray[room] === undefined)
            clientsArray[room] = [];
        clientsArray[room].push(socket.id);

        log('Received request to create or join room ' + room);

        var numClients = clientsArray[room].length;
        log('Room ' + room + ' now has ' + numClients + ' client(s)');

        if (numClients === 1) {
            socket.join(room);      
            io.sockets.in(room).emit('created', room, socket.id);

        } else if (numClients === 2) {
            io.sockets.in(room).emit('join', room);
            socket.join(room);
            io.sockets.in(room).emit('joined', room, socket.id);
        } else { // max two clients
            socket.emit('full', room);
        }
    });
});

Вот что я не совсем понимаю или могу ошибаться:

На сервере я определил var roomNow и var clientArray.

clientArray собирает все комнаты и клиентов , которые находятся в комнатах, вот пример:

{ room1 : [<socket id of user A>, <socker id of user B>],
  room2 : [<socket id of user C>, <socker id of user D>]}

roomNow установлен на join or create и используется здесь: socket.to(roomNow).emit('message', message);. Это используется для создания соединения, поэтому клиенты в той же комнате получают сообщения.

НО не неправильно ли менять roomNow каждый раз при join or create? Это работает только в тестовых случаях или когда только несколько пользователей используют приложение. Если бы у меня были тысячи запросов, не было бы roomNow перезаписано все время и все испортилось бы?

Не лучше ли было бы полностью удалить roomNow и использовать socket.id клиента, чтобы найти правильный номер от clientArray?

...