... 각각 2-4 플레이어 객실의 수천을 가지고에 목표로하고있어, 모든 socket.io는 목록을 통해 루핑하고있다 각 소켓에 패킷을 보냅니다 (아래 코드 참조).
코드가 비슷한 작업을 수행하는 경우 성능이 비슷할 수 있습니다.
클러스터링과 함께 사용되는 redis 어댑터와 같은 사용자 지정 어댑터를 사용하는 경우 기능 차이가 발생할 수있는 경우 다른 서버에 연결된 사용자에게 브로드 캐스팅 논리가 내장 된 서버에 의해 처리됩니다. 어댑터에서,하지만 당신이 자신의 방송을하는 경우 스스로 구현해야 할 수도 있습니다. 여기
는
.broadcast()
의 socket.io 어댑터 버전입니다 :
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);
}
}
}
});
};
최고, 덕분에 많이 :) – trueicecold