1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-16 08:41:57 +03:00

use socket.setNoDelay and queueMicrotask to improve latency

This commit is contained in:
leibale
2021-07-19 17:38:48 -04:00
parent 81456fc1fc
commit a84d9eeefb
3 changed files with 22 additions and 3 deletions

View File

@@ -444,20 +444,29 @@ export default class RedisClient<M extends RedisModules = RedisModules, S extend
return this.#socket.disconnect();
}
#isTickQueued = false;
#tick(): void {
const {chunkRecommendedSize} = this.#socket;
if (!chunkRecommendedSize) {
return;
}
// TODO: batch using process.nextTick? maybe socket.setNoDelay(false)?
if (!this.#isTickQueued && this.#queue.waitingToBeSentCommandsLength < chunkRecommendedSize) {
queueMicrotask(() => this.#tick());
this.#isTickQueued = true;
return;
}
const isBuffering = this.#queue.executeChunk(chunkRecommendedSize);
if (isBuffering === true) {
this.#socket.once('drain', () => this.#tick());
} else if (isBuffering === false) {
this.#tick();
return;
}
this.#isTickQueued = false;
}
}