net-web
v0.3.0
Published
Virtual TCP sockets for the browser - a net module shim for the web
Maintainers
Readme
net-web
Virtual TCP sockets for the browser. A shim for Node's net module that uses in-memory EventEmitters instead of real network connections.
Why?
Browsers can't open TCP sockets. This module provides a virtual socket layer that allows code written for Node's net module to work in the browser. When paired with http-web and hsync, you can run an HTTP server entirely in a browser tab.
Installation
npm install net-webUsage
Creating a Server
const net = require('net-web');
const server = net.createServer((socket) => {
console.log('Client connected');
socket.on('data', (data) => {
console.log('Received:', data);
socket.write('Echo: ' + data);
});
socket.on('close', () => {
console.log('Client disconnected');
});
});
server.listen(3000);Creating a Client
const net = require('net-web');
const socket = net.Socket();
socket.on('data', (data) => {
console.log('Server says:', data);
});
socket.connect(3000, 'localhost', () => {
socket.write('Hello server!');
});Closing a Server
server.close(() => {
console.log('Server closed');
});API
net.createServer(connectionListener)
Creates a virtual server. The connectionListener is called for each incoming connection with a socket object.
Returns a server object with:
listen(port)- Start listening on a virtual portclose([callback])- Stop listening and clean up
net.Socket()
Creates a virtual client socket.
Returns a socket object with:
connect(port, [host], [callback])- Connect to a serverwrite(data)- Send data to the connected serverend()- Close the connectionon(event, callback)- Listen for events ('data', 'close')
net.events
The shared EventEmitter used for routing connections. Exposed for advanced use cases.
net.servers
Map of active servers by port. Exposed for debugging.
How It Works
Instead of real TCP connections, net-web uses a shared EventEmitter to route data between sockets:
server.listen(port)registers a listener forsocket_connect_{port}eventssocket.connect(port)emits asocket_connect_{port}event- The server creates a paired socket and calls the connection handler
socket.write()emitsdataevents on the paired socketsocket.end()emitscloseevents
All communication is synchronous and in-memory. The "port" is just an identifier for matching clients to servers.
Global State
The module maintains global state via globalThis.nodeNetWeb so that multiple modules importing net-web share the same event bus. This allows http-web to communicate with hsync through the same virtual ports.
License
ISC
