refs #115 Through ping and reconnect when ws state is connecting
This commit is contained in:
parent
a3a3c05808
commit
37964fcf51
|
@ -59,7 +59,7 @@
|
||||||
"oauth": "^0.9.15",
|
"oauth": "^0.9.15",
|
||||||
"socks-proxy-agent": "h3poteto/node-socks-proxy-agent#master",
|
"socks-proxy-agent": "h3poteto/node-socks-proxy-agent#master",
|
||||||
"typescript": "3.5.3",
|
"typescript": "3.5.3",
|
||||||
"ws": "^7.0.1"
|
"ws": "^7.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/core-js": "^2.5.0",
|
"@types/core-js": "^2.5.0",
|
||||||
|
|
|
@ -44,7 +44,7 @@ export default class WebSocket extends EventEmitter {
|
||||||
}
|
}
|
||||||
this.proxyConfig = proxyConfig
|
this.proxyConfig = proxyConfig
|
||||||
this._accessToken = accessToken
|
this._accessToken = accessToken
|
||||||
this._reconnectInterval = 1000
|
this._reconnectInterval = 10000
|
||||||
this._reconnectMaxAttempts = Infinity
|
this._reconnectMaxAttempts = Infinity
|
||||||
this._reconnectCurrentAttempts = 0
|
this._reconnectCurrentAttempts = 0
|
||||||
this._connectionClosed = false
|
this._connectionClosed = false
|
||||||
|
@ -106,23 +106,27 @@ export default class WebSocket extends EventEmitter {
|
||||||
* Reconnects to the same endpoint.
|
* Reconnects to the same endpoint.
|
||||||
*/
|
*/
|
||||||
private _reconnect() {
|
private _reconnect() {
|
||||||
if (this._client) {
|
setTimeout(() => {
|
||||||
setTimeout(() => {
|
// Skip reconnect when client is connecting.
|
||||||
if (this._reconnectCurrentAttempts < this._reconnectMaxAttempts) {
|
// https://github.com/websockets/ws/blob/7.2.1/lib/websocket.js#L365
|
||||||
this._reconnectCurrentAttempts++
|
if (this._client && this._client.readyState === WS.CONNECTING) {
|
||||||
this._clearBinding()
|
return
|
||||||
if (this._client) {
|
}
|
||||||
// In reconnect, we want to close the connection immediately,
|
|
||||||
// because recoonect is necessary when some problems occur.
|
if (this._reconnectCurrentAttempts < this._reconnectMaxAttempts) {
|
||||||
this._client.terminate()
|
this._reconnectCurrentAttempts++
|
||||||
}
|
this._clearBinding()
|
||||||
// Call connect methods
|
if (this._client) {
|
||||||
console.log('Reconnecting')
|
// In reconnect, we want to close the connection immediately,
|
||||||
this._client = this._connect(this.url, this.stream, this._accessToken, this.headers, this.proxyConfig)
|
// because recoonect is necessary when some problems occur.
|
||||||
this._bindSocket(this._client)
|
this._client.terminate()
|
||||||
}
|
}
|
||||||
}, this._reconnectInterval)
|
// Call connect methods
|
||||||
}
|
console.log('Reconnecting')
|
||||||
|
this._client = this._connect(this.url, this.stream, this._accessToken, this.headers, this.proxyConfig)
|
||||||
|
this._bindSocket(this._client)
|
||||||
|
}
|
||||||
|
}, this._reconnectInterval)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -243,16 +247,18 @@ export default class WebSocket extends EventEmitter {
|
||||||
// Block multiple calling, if multiple pong event occur.
|
// Block multiple calling, if multiple pong event occur.
|
||||||
// It the duration is less than interval, through ping.
|
// It the duration is less than interval, through ping.
|
||||||
if (now.diff(timestamp) > this._heartbeatInterval - 1000 && !this._connectionClosed) {
|
if (now.diff(timestamp) > this._heartbeatInterval - 1000 && !this._connectionClosed) {
|
||||||
if (this._client) {
|
// Skip ping when client is connecting.
|
||||||
|
// https://github.com/websockets/ws/blob/7.2.1/lib/websocket.js#L289
|
||||||
|
if (this._client && this._client.readyState !== WS.CONNECTING) {
|
||||||
this._pongWaiting = true
|
this._pongWaiting = true
|
||||||
this._client.ping('')
|
this._client.ping('')
|
||||||
|
setTimeout(() => {
|
||||||
|
if (this._pongWaiting) {
|
||||||
|
this._pongWaiting = false
|
||||||
|
this._reconnect()
|
||||||
|
}
|
||||||
|
}, 10000)
|
||||||
}
|
}
|
||||||
setTimeout(() => {
|
|
||||||
if (this._pongWaiting) {
|
|
||||||
this._pongWaiting = false
|
|
||||||
this._reconnect()
|
|
||||||
}
|
|
||||||
}, 10000)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
yarn.lock
12
yarn.lock
|
@ -643,7 +643,7 @@ astral-regex@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
||||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
||||||
|
|
||||||
async-limiter@^1.0.0, async-limiter@~1.0.0:
|
async-limiter@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
|
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
|
||||||
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
|
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
|
||||||
|
@ -4404,12 +4404,10 @@ ws@^5.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
ws@^7.0.1:
|
ws@^7.2.1:
|
||||||
version "7.2.0"
|
version "7.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.0.tgz#422eda8c02a4b5dba7744ba66eebbd84bcef0ec7"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.1.tgz#03ed52423cd744084b2cf42ed197c8b65a936b8e"
|
||||||
integrity sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==
|
integrity sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==
|
||||||
dependencies:
|
|
||||||
async-limiter "^1.0.0"
|
|
||||||
|
|
||||||
xml-name-validator@^3.0.0:
|
xml-name-validator@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
|
|
Loading…
Reference in a new issue