47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
// based off of https://github.com/apaszke/tcp-ping
|
|
// rewritten with modern es6 syntax & promises
|
|
const { io: ClientIO } = require('socket.io-client')
|
|
|
|
const testConnectAsync = (options) => {
|
|
let connectTimes = 0
|
|
options = Object.assign({ retryTimes: 3, timeout: 5000, host: 'http://localhost', port: '80' }, options)
|
|
const { retryTimes, host, port, timeout } = options
|
|
// eslint-disable-next-line
|
|
return new Promise(async (resolve, reject) => {
|
|
while (connectTimes < retryTimes) {
|
|
try {
|
|
connectTimes++
|
|
await connect({ host, port, timeout })
|
|
break
|
|
} catch (error) {
|
|
// 重连次数达到限制仍未连接成功
|
|
if(connectTimes === retryTimes) {
|
|
reject({ message: error.message, host, port, connectTimes })
|
|
return
|
|
}
|
|
}
|
|
}
|
|
resolve({ status: 'connect_success', host, port, connectTimes })
|
|
})
|
|
}
|
|
|
|
const connect = (options) => {
|
|
const { host, port, timeout } = options
|
|
return new Promise((resolve, reject) => {
|
|
let io = ClientIO(`${ host }:${ port }`, {
|
|
path: '/client/os-info',
|
|
forceNew: false,
|
|
timeout,
|
|
reconnection: false
|
|
})
|
|
.on('connect', () => {
|
|
resolve()
|
|
io.disconnect()
|
|
})
|
|
.on('connect_error', (error) => {
|
|
reject(error)
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = testConnectAsync |