uWebsockets.js for FreeBSD
Go to file
Alex Hultman 0584733475 Update uS 2019-01-28 18:36:58 +01:00
examples UniquePersistent all over, app.forcefully_free 2019-01-23 12:59:51 +01:00
misc Add self-signed key/cert for examples 2019-01-17 10:35:06 +01:00
src Update for API change: ws.end, ws.close 2019-01-26 17:26:53 +01:00
tests Update for API change: ws.end, ws.close 2019-01-26 17:26:53 +01:00
uWebSockets@ca38ea1669 Update uS 2019-01-28 18:36:58 +01:00
.gitmodules Add uWebSockets submodule 2018-11-04 00:11:12 +01:00
LICENSE Apache 2.0 license 2018-11-15 16:01:49 +01:00
Makefile Further MS-DOS madness 2019-01-16 22:19:12 +01:00
README.md Update README.md 2019-01-28 18:29:03 +01:00

README.md

µWebSockets™ (it's "micro") is simple, secure & standards compliant web I/O for the most demanding[1] of applications.

Read more

NPM install

While not physically hosted by NPM, it's still possible to install using NPM tools like so (npm docs):

npm install uNetworking/uWebSockets.js#binaries

Presenting; faster I/O for Node.js

Every other week a new "web framework" pops up for Node.js. Fastify, Restana, Aero, Micro and so on. Most aim to improve I/O performance, but fall flat. You can't fix an inherent design flaw of an entire stack just by slapping a few lines of JavaScript on top.

µWS.js is a 100% C/C++ web platform completely bypassing the entire Node.js I/O stack. JavaScript-exposed functions and objects are entirely backed by native code all the way down to the OS kernel. This makes it possible to reach unprecedented I/O performance from within Node.js (or any stand-alone V8 build). This stack is, within Node.js, faster than gorilla/websocket for Golang even on an SSL-vs-non-SSL basis.

In a nutshell
const uWS = require('uWebSockets.js');
const port = 3000;

uWS.SSLApp({
  /* cert, key and such specified here, or use uWS.App */
}).get('/whatsmyuseragent', (res, req) => {
  res.writeHeader(
    'content-type', 'text/html; charset= utf-8'
  ).end(
    'Your user agent is: ' + req.getHeader('user-agent')
  );
}).get('/*', (res, req) => {
  res.end('Wildcard route');
}).listen(port, (token) => {
  if (token) {
    console.log('Listening to port ' + port);
  } else {
    console.log('Failed to listen to port ' + port);
  }
});

Streams

Proper streaming of huge data is supported over Http/Https and demonstrated with examples. Here's a shot of me watching real-time streamed HD video from Node.js while simultaneously scoring a 115k req/sec with wrk. For my computer, that's about 5x that of vanilla Node.js (without any HD video streaming/playing).

Benchmarks

Performance retention is about 65% that of the native C++ µWebSockets v0.15. That makes it some 20x as fast as Deno and even faster than most C++-only servers, all from within a JavaScript VM.

Http WebSockets

Build from source

Recursively clone, and enter, this repo:

git clone --recursive https://github.com/uNetworking/uWebSockets.js.git
cd uWebSockets.js

For Unix (Linux, macOS):

make

For Windows (in an x64 developer terminal):

nmake Windows

Test it out

node examples/HelloWorld.js