GithubHelp home page GithubHelp logo

mux-net's Introduction

Mux-net

Mux-net is a net module multiplexer for Node.js, making it transparent and easy to listen for inbound TCP connections on multiple network interfaces.

Usage

  • Before loading any other modules, call require('mux-net').hook()
  • Listen on a hostname (like localhost on some platforms) which can resolve to more than one address
  • Make sure your code doesn't get mad if the listen callback fires more than once

Theory of Operation

Modules building services on top of TCP should be using the Node.js net module to create servers. When mux-net's hook() method is invoked, it replaces the Server export from that module with its own. When other modules are loaded, they use these methods to create services, frequently inheriting from Server.

The Server class in mux-net has a listen method which invokes listen() one or more net::Server instances, and the listen callback is invoked on each of these as they become ready. Similarly, other events on the net::Server instances which fire are re-fired from the mux-net::Server instance.

The number of net::Server instances used by mux-net::Server is related to the number of IP addresses that the host (or hosts) property of the options object resolves to. For example, if you system resolver returns both ::1 and 127.0.0.1 when you lookup localhost and you ask your server to listen on localhost, then the mux-net::Server will create two instances of net::Server, one for each address.

Http server example

require('./mux-net').hook();
const http = require('node:http');

const server = http.createServer((req, res) => {
  res.end(`You connected on ${res.socket._server._connectionKey}\n`);
});

server.listen({host: 'localhost', port: 8000});

Net Extensions

hosts option

The Server constructor accepts an Array, hosts, which can specify multiple hostnames upon which to listen

INADDR_ANY

The hosts option recognizes the following aliases for INADDR_ANY, all of which mean "listen on all addresses":

  • any/0
  • inaddr_any
  • INADDR_ANY
  • ::

Specifying the address 0.0.0.0 explicitly binds to all IPv4 interfaces but not to IPv6 interfaces.

Release Notes

The initial release was April 30 2024.

Author

Wes Garland, [email protected]

mux-net's People

Contributors

wesgarland avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.