Как вы можете видеть, глядя на the code for the socket.io adapter .broadcast()
on GitHub весь socket.io делает зацикливается по списку сокетов и отправки пакета каждому из них (см. код ниже).
Итак, если ваш код делает что-то подобное, тогда производительность, скорее всего, будет чем-то подобным.
Если вы заметили разницу в характеристиках, это если вы используете пользовательский адаптер, такой как адаптер redis, который используется с кластеризацией, тогда логика вещания для пользователей, подключенных к различным серверам, будет обрабатываться для вас встроенным адаптером, в адаптере, но может быть что-то, что вам нужно было бы реализовать самостоятельно, если вы делаете свою собственную трансляцию.
Вот версия socket.io-адаптер .broadcast()
:
Adapter.prototype.broadcast = function(packet, opts){
var rooms = opts.rooms || [];
var except = opts.except || [];
var flags = opts.flags || {};
var packetOpts = {
preEncoded: true,
volatile: flags.volatile,
compress: flags.compress
};
var ids = {};
var self = this;
var socket;
packet.nsp = this.nsp.name;
this.encoder.encode(packet, function(encodedPackets) {
if (rooms.length) {
for (var i = 0; i < rooms.length; i++) {
var room = self.rooms[rooms[i]];
if (!room) continue;
var sockets = room.sockets;
for (var id in sockets) {
if (sockets.hasOwnProperty(id)) {
if (ids[id] || ~except.indexOf(id)) continue;
socket = self.nsp.connected[id];
if (socket) {
socket.packet(encodedPackets, packetOpts);
ids[id] = true;
}
}
}
}
} else {
for (var id in self.sids) {
if (self.sids.hasOwnProperty(id)) {
if (~except.indexOf(id)) continue;
socket = self.nsp.connected[id];
if (socket) socket.packet(encodedPackets, packetOpts);
}
}
}
});
};
Awesome, спасибо :) – trueicecold