npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mux-net

v1.0.2

Published

network API for Servers that listen on many addresses

Downloads

3

Readme

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]