Stream data sender now reacts to connection delay. It will buffer requests when the delay is high.

This commit is contained in:
NI
2019-12-29 13:57:27 +08:00
parent 8b4e406fa9
commit 2861664f4a
2 changed files with 24 additions and 1 deletions

View File

@@ -22,6 +22,9 @@ import * as crypt from "./crypto.js";
export const ECHO_FAILED = streams.ECHO_FAILED; export const ECHO_FAILED = streams.ECHO_FAILED;
const maxSenderDelay = 200;
const minSenderDelay = 30;
class Dial { class Dial {
/** /**
* constructor * constructor
@@ -190,7 +193,7 @@ class Dial {
} }
}, },
4096 - 64, // Server has a 4096 bytes receive buffer, can be no greater, 4096 - 64, // Server has a 4096 bytes receive buffer, can be no greater,
30, // 30ms input delay minSenderDelay, // 30ms input delay
10 // max 10 buffered requests 10 // max 10 buffered requests
); );
@@ -331,6 +334,16 @@ export class Socket {
let streamHandler = new streams.Streams(conn.reader, conn.sender, { let streamHandler = new streams.Streams(conn.reader, conn.sender, {
echoInterval: self.echoInterval, echoInterval: self.echoInterval,
echoUpdater(delay) { echoUpdater(delay) {
const sendDelay = delay / 2;
if (sendDelay > maxSenderDelay) {
conn.sender.setDelay(maxSenderDelay);
} else if (sendDelay < minSenderDelay) {
conn.sender.setDelay(minSenderDelay);
} else {
conn.sender.setDelay(sendDelay);
}
return callbacks.echo(delay); return callbacks.echo(delay);
}, },
cleared(e) { cleared(e) {

View File

@@ -41,6 +41,16 @@ export class Sender {
this.bufferReq = 0; this.bufferReq = 0;
} }
/**
* Set the send delay of current sender
*
* @param {integer} newDelay the new delay
*
*/
setDelay(newDelay) {
this.bufferFlushDelay = newDelay;
}
/** /**
* Sends data to the this.sender * Sends data to the this.sender
* *