• Jump To … +
    API compressor.js connection.js endpoint.js flow.js framer.js index.js stream.js
  • index.js

  • ¶

    This is an implementation of the HTTP/2 framing layer for node.js.

    The main building blocks are node.js streams that are connected through pipes.

    The main components are:

    • Endpoint: represents an HTTP/2 endpoint (client or server). It’s responsible for the the first part of the handshake process (sending/receiving the connection header) and manages other components (framer, compressor, connection, streams) that make up a client or server.

    • Connection: multiplexes the active HTTP/2 streams, manages connection lifecycle and settings, and responsible for enforcing the connection level limits (flow control, initiated stream limit)

    • Stream: implementation of the HTTP/2 stream concept. Implements the stream state machine defined by the standard, provides management methods and events for using the stream (sending/receiving headers, data, etc.), and enforces stream level constraints (flow control, sending only legal frames).

    • Flow: implements flow control for Connection and Stream as parent class.

    • Compressor and Decompressor: compression and decompression of HEADER and PUSH_PROMISE frames

    • Serializer and Deserializer: the lowest layer in the stack that transforms between the binary and the JavaScript object representation of HTTP/2 frames

    exports.VERSION = 'h2';
    
    exports.Endpoint = require('./endpoint').Endpoint;
    
    /* Bunyan serializers exported by submodules that are worth adding when creating a logger. */
    exports.serializers = {};
    var modules = ['./framer', './compressor', './flow', './connection', './stream', './endpoint'];
    modules.map(require).forEach(function(module) {
      for (var name in module.serializers) {
        exports.serializers[name] = module.serializers[name];
      }
    });
    
    /*
                  Stream API            Endpoint API
                  Stream data
    
                 |            ^        |            ^
                 |            |        |            |
                 |            |        |            |
     +-----------|------------|---------------------------------------+
     |           |            |   Endpoint                            |
     |           |            |                                       |
     |   +-------|------------|-----------------------------------+   |
     |   |       |            |  Connection                       |   |
     |   |       v            |                                   |   |
     |   |  +-----------------------+  +--------------------      |   |
     |   |  |        Stream         |  |         Stream      ...  |   |
     |   |  +-----------------------+  +--------------------      |   |
     |   |       |            ^              |            ^       |   |
     |   |       v            |              v            |       |   |
     |   |       +------------+--+--------+--+------------+- ...  |   |
     |   |                       |        ^                       |   |
     |   |                       |        |                       |   |
     |   +-----------------------|--------|-----------------------+   |
     |                           |        |                           |
     |                           v        |                           |
     |   +--------------------------+  +--------------------------+   |
     |   |        Compressor        |  |       Decompressor       |   |
     |   +--------------------------+  +--------------------------+   |
     |                           |        ^                           |
     |                           v        |                           |
     |   +--------------------------+  +--------------------------+   |
     |   |        Serializer        |  |       Deserializer       |   |
     |   +--------------------------+  +--------------------------+   |
     |                           |        ^                           |
     +---------------------------|--------|---------------------------+
                                 |        |
                                 v        |
    
                                  Raw data
    
    */