uWebsockets.js for FreeBSD
Go to file
2019-03-02 04:38:01 +01:00
docs Update docs 2019-02-21 20:03:43 +01:00
examples Clean exit, remove forcefully_free 2019-03-02 04:38:01 +01:00
misc Update example cert/key 2019-02-03 15:51:02 +01:00
src Clean exit, remove forcefully_free 2019-03-02 04:38:01 +01:00
tests Clean exit, remove forcefully_free 2019-03-02 04:38:01 +01:00
uWebSockets@35e6bad33b Clean exit, remove forcefully_free 2019-03-02 04:38:01 +01:00
.gitmodules Add uWebSockets submodule 2018-11-04 00:11:12 +01:00
.travis.yml Update .travis.yml 2019-02-26 18:21:33 +01:00
LICENSE Apache 2.0 license 2018-11-15 16:01:49 +01:00
Makefile Spaces to tabs 2019-02-17 11:32:07 +02:00
README.md Bump to v15.4.0 2019-03-01 20:59:30 +01:00

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

TypeScript docsRead more & user manual (C++ project)

Outrun. Everyone.

This project is not your typical "web framework" à la 500 lines of JavaScript and a fancy logo. No, you're looking at a three part software suite of ~7k lines of C & C++, working in unison with Google V8 to bring you one of the most memory scalable and performant I/O scripting environments available.

It runs 15x faster than Deno and scales to millions of connections using less than half a GB of user space memory.

Read the release post and/or the 1 million WebSockets post.

No compiler needed.

We use AppVeyor & TravisCI to automatically pre-compile binaries for Linux, macOS and Windows with every push. New releases are tagged from branch binaries and can be installed using NPM like so:

npm install uNetworking/uWebSockets.js#v15.4.0

where v15.4.0 is the particular Git tag you wanted to use. "Nightly" builds can be installed with suffix #binaries.

In a nutshell

There are tons of examples but here's the gist of it all:

const uWS = require('../dist/uws.js');
const port = 9001;

const app = uWS.SSLApp({
  key_file_name: 'misc/key.pem',
  cert_file_name: 'misc/cert.pem',
  passphrase: '1234'
}).ws('/*', {
  /* Options */
  compression: 0,
  maxPayloadLength: 16 * 1024 * 1024,
  idleTimeout: 10,
  /* Handlers */
  open: (ws, req) => {
    console.log('A WebSocket connected via URL: ' + req.getUrl() + '!');
  },
  message: (ws, message, isBinary) => {
    /* Ok is false if backpressure was built up, wait for drain */
    let ok = ws.send(message, isBinary);
  },
  drain: (ws) => {
    console.log('WebSocket backpressure: ' + ws.getBufferedAmount());
  },
  close: (ws, code, message) => {
    console.log('WebSocket closed');
  }
}).any('/*', (res, req) => {
  res.end('Nothing to see here!');
}).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).

Pub/sub

WIP section --

Benchmarks

In the following charts "µWS v0.15" denote the C++ project - performance retention for µWebSockets.js inside of V8 is about 65-75%, similar to or above the top performing Golang modules. User space memory usage for a million WebSockets is in the 100-400mb range.

Http WebSockets PubSub
todo: Socket.IO, SocketCluster, ClusterWS

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, FreeBSD):

make

For Windows (in an x64 developer terminal):

nmake Windows

Test it out

node examples/HelloWorld.js