express.js के साथ node.js सर्वर और HTTP/2(2.0)




http2 (3)

यह मुद्दा अभी भी लगभग एक वर्ष बाद (लगभग एक साल बाद) है, इसलिए मैंने एक्सप्रेस और http2 पैकेज को अच्छी तरह से एक साथ काम करने के लिए कामकाज करने का फैसला किया। मैंने एक एनपीएम पैकेज बनाया है जो वास्तव में करता है: https://www.npmjs.com/package/express-http2-workaround

एनपीएम के माध्यम से स्थापित करें: एनपीएम एक्सप्रेस-http2-वर्कअराउंड - सेव इंस्टॉल करें

// 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);
});

उपर्युक्त कोड एक कार्यकारी एक्सप्रेस एप्लिकेशन है जो नोडजेस http मॉड्यूल (HTTP / 1.x के लिए) और http2 मॉड्यूल (HTTP / 2 के लिए) दोनों का उपयोग करता है।

जैसा कि रीडमे में उल्लेख किया गया है, यह नया एक्सप्रेस अनुरोध और प्रतिक्रिया ऑब्जेक्ट बनाता है और http2 के आने वाली मैसेज और सर्वर रेस्पॉन्स ऑब्जेक्ट्स पर उनके प्रोटोटाइप सेट करता है। डिफ़ॉल्ट रूप से, यह अंतर्निहित nodejs http IncomingMessage और ServerResponse ऑब्जेक्ट्स है।

आशा है कि ये आपकी मदद करेगा :)

क्या वर्तमान में यह node.js HTTP / 2 (HTTP 2.0) सर्वर प्राप्त करना संभव है? और express.js का http 2.0 संस्करण?


यदि आप [email protected]^5 और [email protected]^3.3.4 का उपयोग कर रहे हैं, तो सर्वर शुरू करने का सही तरीका है:

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 */
    });

https2.raw ध्यान https2.rawयदि आप टीसीपी कनेक्शन स्वीकार करना चाहते हैं तो यह आवश्यक है।

ध्यान दें कि इस लेखन के समय (2016 05 06), कोई भी प्रमुख ब्राउज़र टीसीपी पर HTTP2 का समर्थन नहीं करता है

यदि आप टीसीपी और टीएलएस कनेक्शन स्वीकार करना चाहते हैं, तो आपको डिफ़ॉल्ट createServer विधि का उपयोग कर सर्वर प्रारंभ करने की आवश्यकता है:

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 */
    });

ध्यान दें कि इस लेखन के समय, मैंने काम करने के लिए express और http2 बनाने का प्रबंधन किया था ( https://github.com/molnarg/node-http2/issues/100#issuecomment-217417055 )। हालांकि, मैंने spdy पैकेज का उपयोग कर काम करने के लिए http2 (और SPDY) प्राप्त करने में कामयाब रहा है।

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 */
    });

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);

संपादित करें

इस कोड स्निपेट को github.com/strongloop/express/issues/2364 से लिया गया था github.com/strongloop/express/issues/2364





http2