async forceClose(err) { if (this._closed) { return; } this._lastError = err; this._cleanRequest(err); this._session.destroy(); await this.await('close'); }
array.forEach(() => { const req = client.request({ ":method": "GET", ":path": "/" }); // req.on("response", responseHeaders => { // do something with the headers // console.log({ responseHeaders }); // }); // req.on("data", chunk => { // do something with the data // console.log("chunk", chunk); // }); // req.on("end", () => { // console.log('response received'); // }) });
/** * 心跳,用户维护长连接 * @param {Buffer} payload - payload * @return {void} */ heartbeat(payload = defaultPayload) { // 长时间空闲需要发心跳来续命(服务端 90s 空闲强制断开) if ((Date.now() - this._lastActiveTime) > this.options.maxIdleTime) { this._lastActiveTime = Date.now(); this._session.ping(payload, err => { if (err) { this.close(err); } }); } }
_connect() { this._session = http2.connect(this.url); this._session.setTimeout(this.options.connectTimeout, () => { const err = new Error('session#' + this.url + ' connect timeout(' + this.options.connectTimeout + 'ms)'); err.name = 'GRpcSessionConnectTimeoutError'; this.close(err); this.ready(err); }); this._session.once('close', () => { this._handleClose(); }); this._session.once('error', err => { this._handleSocketError(err); }); this._session.once('connect', () => { this._connected = true; this._session.setTimeout(0); const socket = this._session.socket; this._clientUrl = socket.localAddress + ':' + socket.localPort; this.ready(true); }); }
client.on('error', onError) client.on('socketError', onError) }) var req = client.request({ ':path': '/sub' }) req.on('end', () => client.destroy()) req.pipe(stream) } else { port = server.address().port var client = connect(secure, port) client.on('error', onError) client.on('socketError', onError) var req = client.request({ ':path': '/' }) assertResponse(t, req, 'foo') req.resume() req.on('end', () => client.destroy()) req.end() })