Simple, secure1 & standards compliant2 web server for the most demanding3 of applications. Read more...
µWebSockets.js is a standards compliant & secure web server bypass for Node.js that reimplements eventing, networking, encryption, web protocols, routing and pub/sub from scratch in highly optimized native code. As such, µWebSockets.js delivers web serving for Node.js, 8.5x that of Fastify and at least 10x that of Socket.IO.
-
It scores indistinguishable from 1st in TE (not endorsed) and makes up the core components of Bun (not associated). It is also 1st in this test.
-
We recommend, for simplicity installing with
npm install uNetworking/uWebSockets.js#v20.44.0
or any such release. Use official builds of Node.js LTS or current. Our take on the NPM registry. -
Browse the documentation and see the main repo. There are tons of examples but here's the gist of it all:
/* Non-SSL is simply App() */
require('uWebSockets.js').SSLApp({
/* There are more SSL options, cut for brevity */
key_file_name: 'misc/key.pem',
cert_file_name: 'misc/cert.pem',
}).ws('/*', {
/* There are many common helper features */
idleTimeout: 32,
maxBackpressure: 1024,
maxPayloadLength: 512,
compression: DEDICATED_COMPRESSOR_3KB,
/* For brevity we skip the other events (upgrade, open, ping, pong, close) */
message: (ws, message, isBinary) => {
/* You can do app.publish('sensors/home/temperature', '22C') kind of pub/sub as well */
/* Here we echo the message back, using compression if available */
let ok = ws.send(message, isBinary, true);
}
}).get('/*', (res, req) => {
/* It does Http as well */
res.writeStatus('200 OK').writeHeader('IsExample', 'Yes').end('Hello there!');
}).listen(9001, (listenSocket) => {
if (listenSocket) {
console.log('Listening to port 9001');
}
});
Intellectual property, all rights reserved.
Where such explicit notice is given, source code is licensed Apache License 2.0 which is a permissive OSI-approved license with very few limitations. Modified "forks" should be of nothing but licensed source code, and be made available under another product name. If you're uncertain about any of this, please ask before assuming.