Ist es derzeit möglich, node.js HTTP/2 (HTTP 2.0) Server zu erhalten? Und http 2.0 Version von express.js?node.js Server und HTTP/2 (2.0) mit express.js
Antwort
genommen wurde Wenn Sie [email protected]^5
und [email protected]^3.3.4
verwenden, dann der richtige Weg, um den Server zu starten ist:
const http2 = require('http2');
const express = require('express');
const app = express();
// app.use('/', ..);
http2
.raw
.createServer(app)
.listen(8000, (err) => {
if (err) {
throw new Error(err);
}
/* eslint-disable no-console */
console.log('Listening on port: ' + argv.port + '.');
/* eslint-enable no-console */
});
Beachten Sie die https2.raw
. This is required if you want to accept TCP connections.
Beachten Sie, dass zum Zeitpunkt dieses Schreibens (2016 05 06), none of the major browsers support HTTP2 over TCP.
Wenn Sie TCP und TLS-Verbindungen akzeptieren, dann müssen Sie den Server starten Sie den Standard createServer
Methode:
const http2 = require('http2');
const express = require('express');
const fs = require('fs');
const app = express();
// app.use('/', ..);
http2
.createServer({
key: fs.readFileSync('./localhost.key'),
cert: fs.readFileSync('./localhost.crt')
}, app)
.listen(8000, (err) => {
if (err) {
throw new Error(err);
}
/* eslint-disable no-console */
console.log('Listening on port: ' + argv.port + '.');
/* eslint-enable no-console */
});
Beachten Sie, dass zum Zeitpunkt des Schreibens dieses Artikels habe ich verwalten express
zu machen und http2
zu arbeiten (siehe https://github.com/molnarg/node-http2/issues/100#issuecomment-217417055). Jedoch habe ich geschafft, http2 (und SPDY) zu arbeiten, mit spdy
Paket.
const spdy = require('spdy');
const express = require('express');
const path = require('path');
const fs = require('fs');
const app = express();
app.get('/', (req, res) => {
res.json({foo: 'test'});
});
spdy
.createServer({
key: fs.readFileSync(path.resolve(__dirname, './localhost.key')),
cert: fs.readFileSync(path.resolve(__dirname, './localhost.crt'))
}, app)
.listen(8000, (err) => {
if (err) {
throw new Error(err);
}
/* eslint-disable no-console */
console.log('Listening on port: ' + argv.port + '.');
/* eslint-enable no-console */
});
Interessanterweise erhalte ich diesen Fehler und https://github.com/expressjs/express/issues/2761#issuecomment-216912022. (node) warning: Möglich EventEmitter Speicherleck erkannt. 11 Fehlerlistener hinzugefügt. Verwenden Sie emitter.setMaxListeners(), um das Limit zu erhöhen. – zmanc
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('hello, http2!');
});
var options = {
key: fs.readFileSync('./example/localhost.key'),
cert: fs.readFileSync('./example/localhost.crt')
};
require('http2').createServer(options, app).listen(8080);
EDIT
Dieser Code-Schnipsel aus a conversation on Github.
FYI Dies funktioniert nicht mit 'express @ 4.13.3' und' http2 @ 3.2.0', und es sieht so aus, als ob es express nicht unterstützt v5. https://github.com/molnarg/node-http2/issues/100 –
Es funktioniert nicht mit 'node @ v6.7.0',' express @ 5.0.0-alpha.2', '[email protected] 6'. _TypeError: dest.end ist keine Funktion_ – neoDev
Dieses Problem ist heute noch da (über ein Jahr später), so entschied ich mich zu machen, eine Abhilfe einen gehen zu müssen ausdrücklich zu machen und http2 Pakete gut zusammen arbeiten. Ich habe ein npm Paket erstellt, die genau das tut: https://www.npmjs.com/package/express-http2-workaround
über NPM installieren: npm installieren Express-http2-Umgehung --save
// Require Modules
var fs = require('fs');
var express = require('express');
var http = require('http');
var http2 = require('http2');
// Create Express Application
var app = express();
// Make HTTP2 work with Express (this must be before any other middleware)
require('express-http2-workaround')({ express:express, http2:http2, app:app });
// Setup HTTP/1.x Server
var httpServer = http.Server(app);
httpServer.listen(80,function(){
console.log("Express HTTP/1 server started");
});
// Setup HTTP/2 Server
var httpsOptions = {
'key' : fs.readFileSync(__dirname + '/keys/ssl.key'),
'cert' : fs.readFileSync(__dirname + '/keys/ssl.crt'),
'ca' : fs.readFileSync(__dirname + '/keys/ssl.crt')
};
var http2Server = http2.createServer(httpsOptions,app);
http2Server.listen(443,function(){
console.log("Express HTTP/2 server started");
});
// Serve some content
app.get('/', function(req,res){
res.send('Hello World! Via HTTP '+req.httpVersion);
});
Der obige Code ist ein funktionierendes Express-Anwendung, die beide verwendet die Knoten http-Modul (für HTTP/1.x) und das http2-Modul (für HTTP/2).
Wie in der Readme erwähnt, erstellt dies neue Express-Request- und Response-Objekte und setzt ihre Prototypen auf die IncomingMessage- und ServerResponse-Objekte von http2. Standardmäßig sind dies die integrierten HTTP-Objekte IncomingMessage und ServerResponse von nodejs.
ich hoffe das hilft :)
- 1. Node.js Theorie - Node.js, Express.js, Passport.js
- 2. Node.js + Express.js + SSL
- 3. Node.js/Express.js Kettenzertifikat funktioniert nicht
- 4. Wie JSON-Objekt mit node.js zuzugreifen Express.js
- 5. PHP7, HTTP2 mit cURL
- 6. HTTP2-Protokoll mit playframewok
- 7. Hat Express.js auf Node.js einen Speicherverlust?
- 8. Knoten http2 und Safari
- 9. HAProxy mit HTTP2 Frontend und Backend HTTP1.1
- 10. node.js Express.js Objekt ist keine Funktion call_non_function
- 11. Http2 Protokoll und Statusmeldungen
- 12. Prüfung auf und JSON-Antwort in Node.js/Express.js
- 13. Node.js oder Express.js REST API Dokumentgenerator
- 14. Integrieren JSON Antwort in Node.js/Express.js Reaktion
- 15. node.js Express.js API http Post-Handler
- 16. Express.js/node.js äquivalent zu beenden() in PHP
- 17. Wie HTTP2 Server Push wissen, was Push?
- 18. Node.js + Express.js sehr langsam Serving statische Dateien
- 19. Die beste Methode für dynamisches Routing mit Express.js (node.js)
- 20. Learning node.js/express.js: Was ist der Deal mit bin/www?
- 21. Node.js Client und Server Spiel mit Telnet
- 22. Eingebetteter Java-Server mit Grizzly: Wie aktiviere ich http2
- 23. Wie entwickelt man eine mandantenfähige Anwendung mit Node.js (express.js)?
- 24. socket.io Verwirrung mit Express.js
- 25. CURL mit HTTP2, yum install
- 26. Unit-Test Login mit pass.js und express.js
- 27. Automate Jasmine-Node und express.js
- 28. Ist es möglich, HTTP2 mit HTTPListener
- 29. Wie http2 in Windows 10 Server Technische Vorschau
- 30. Unterschied zwischen app.use und app.get in express.js
Laut ihnen ausdrücklich unterstützen es schon. https://github.com/strongloop/express/issues/2364 –