write(buffer) { if (this.writable) { this._stream.write(buffer); } }
function connect (secure, port) { var proto = secure ? 'https' : 'http' var opts = { rejectUnauthorized: false } return http2.connect(`${proto}://localhost:${port}`, opts) }
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'); // }) });
(function(){ try{ var nodeHTTP2Bindings = process.binding('http2'); var http2 = require('http2'); if(http2.constants===nodeHTTP2Bindings.constants && 'NGHTTP2_SESSION_SERVER' in nodeHTTP2Bindings.constants){ describe = describe.skip; console.warn("WARN: node http2 is exposed, this version of node has http2 support. Test Skipped."); process.exit(1); // Fail for now } }catch(err){} })();
_startServer(port) { const server = http2.createServer(); server.once('error', err => { this.emit('error', err); }); server.on('session', session => { this._handleSocket(session); }); server.on('stream', (stream, headers) => { this._handleStream(stream, headers); }); server.listen(port, () => { const realPort = server.address().port; if (port === this.publishPort && port === 0) { this.publishPort = realPort; } this.logger.info('[RpcServer] server start on %s', realPort); }); return server; }
listen() { let config=this.config; if(config.ssl && config.ssl.enable){ let sslOptions={ key: fs.readFileSync(path.resolve(workDirectory,'ssl/privatekey.pem')), // 私钥 cert: fs.readFileSync(path.resolve(workDirectory,'ssl/certificate.pem')) // 公钥 } const http2 =require('http2'); var sslServer=http2.createSecureServer(sslOptions, this.createHttpHandler()); sslServer.listen(config.ssl.port) } const port=this.config["port"]; const server = http.createServer(this.createHttpHandler()); server.listen(port); }
it("has instance.requestHTTP2's [[Prototype]] as http2.IncomingMessage.prototype",function(){ expect(Object.getPrototypeOf(expressHTTP2WorkaroundMiddleware.instance.requestHTTP2)).to.equal(http2.IncomingMessage.prototype); });
server.on('connection', () => { console.log('connection created'); });
/** * 心跳,用户维护长连接 * @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); } }); } }
it('should stop server',function(done){ done = _.once(done); if(resDoneHandler) resDoneHandler = null; var doneTick = _.after(3,done); httpServer.once('close',doneTick); http2Server.once('close',doneTick); httpServer.close(); // Close all http2 request endpoints for(var key in http2.globalAgent.endpoints){ var endpoint = http2.globalAgent.endpoints[key]; endpoint._connection.close('NO_ERROR'); endpoint.socket.end(); } http2.globalAgent.endpoints = {}; http2Server.close(); doneTick(); });
close() { if (this._stream) { this._stream.close(); this._stream = null; } if (!this._destroyed) { this._destroyed = true; this.emit('close'); } }
get writable() { return this._stream && this._stream.writable; }
it("has instance.responseHTTP2's [[Prototype]] as http2.ServerResponse.prototype",function(){ expect(Object.getPrototypeOf(expressHTTP2WorkaroundMiddleware.instance.responseHTTP2)).to.equal(http2.ServerResponse.prototype); });