sdg-rpc
Version:
pomelo ts rpc
82 lines • 7.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const crc_1 = tslib_1.__importDefault(require("crc"));
const consistentHash_1 = require("../util/consistentHash");
exports.default = {
rr: () => '',
wrr: () => '',
la: (client, serverType) => {
let servers = client.station.serversMap[serverType];
if (!servers || !servers.length)
throw 'rpc servers not exist with serverType: ' + serverType;
const actives = [];
if (!client.laParam)
client.laParam = {};
if (client.laParam[serverType]) {
servers.map(sid => {
let count = client.laParam[serverType][sid];
if (!count) {
client.laParam[serverType][sid] = count = 0;
}
actives.push(count);
});
}
else {
client.laParam[serverType] = {};
servers.map(sid => {
client.laParam[serverType][sid] = 0;
actives.push(0);
});
}
let rs = [];
let minInvoke = Number.MAX_VALUE;
for (let k = 0; k < actives.length; k++) {
if (actives[k] < minInvoke) {
minInvoke = actives[k];
rs = [];
rs.push(servers[k]);
}
else if (actives[k] === minInvoke) {
rs.push(servers[k]);
}
}
const index = Math.floor(Math.random() * rs.length);
const serverId = rs[index];
client.laParam[serverType][serverId] += 1;
return serverId;
},
ch: (client, serverType, msg) => {
let servers = client.station.serversMap[serverType];
if (!servers || !servers.length)
throw 'rpc servers not exist with serverType: ' + serverType;
let con;
if (!client.chParam)
client.chParam = {};
if (client.chParam[serverType]) {
con = client.chParam[serverType].consistentHash;
}
else {
// @ts-ignore
client.opts.station = client.station;
con = new consistentHash_1.ConsistentHash(servers.map(id => client.station.servers[id]), client.opts);
}
// @ts-ignore
let hashFieldIndex = client.opts.hashFieldIndex;
let field = msg.args[hashFieldIndex] || JSON.stringify(msg);
client.chParam[serverType] = {
consistentHash: con
};
return con.getNode(field).id;
},
rd: () => '',
df: (session, msg, context) => {
const list = context.getServersByType(msg.serverType);
if (!list || !list.length)
throw 'can not find server info for type:' + msg.serverType;
const uid = session ? (session.uid || '') : '';
const index = Math.abs(crc_1.default.crc32(uid.toString())) % list.length;
return list[index].id;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQXNCO0FBSXRCLDJEQUF3RDtBQUV4RCxrQkFBZTtJQUNiLEVBQUUsRUFBRSxHQUFXLEVBQUUsQ0FBQyxFQUFFO0lBQ3BCLEdBQUcsRUFBRSxHQUFXLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLEVBQUUsRUFBRSxDQUFDLE1BQW9DLEVBQUUsVUFBa0IsRUFBVSxFQUFFO1FBQ3ZFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE1BQU0seUNBQXlDLEdBQUcsVUFBVSxDQUFDO1FBRTlGLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUV6QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7aUJBQzdDO2dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUE7U0FDSDthQUFNO1lBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENB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