- Linux, OS X & Windows support.
- Chrome, Safari, Firefox, Edge support.
- Keep one thread per CPU core, each serving millions of connections.
- Expose a port range or use the load balancer to only expose one port, scaling over all CPU cores.
- Planned SSL/TLS support (work in progress)
- Node.js bindings are planned and will target the
ws
interface.
Project is a work in progress, initial commit was 21 March, 2016. I'm planning to release something in a month or less.
Implementation | Memory scaling | Connection performance | Short message throughput | Huge message throughput |
---|---|---|---|---|
libwebsockets master(1.7-1.8) | µWS is 14x as lightweight | µWS is equal in performance | µWS is 3x as performant | µWS is equal in performance |
ws v1.0.1 + binary addons | µWS is 52x as lightweight | µWS is 21x as performant | µWS is 23x as performant | µWS is 2x as performant |
WebSocket++ v0.7.0 | µWS is 63x as lightweight | µWS is 5x as performant | µWS is 2x as performant | µWS is 3x as performant |
Benchmarks are run with default settings in all libraries, except for ws which is run with the native performance addons. |
int main()
{
/* this is an echo server that properly passes every supported Autobahn test */
uWS::Server server(3000);
server.onConnection([](uWS::Socket socket) {
cout << "[Connection] clients: " << ++connections << endl;
});
server.onMessage([](uWS::Socket socket, const char *message, size_t length, uWS::OpCode opCode) {
socket.send((char *) message, length, opCode);
});
server.onDisconnection([](uWS::Socket socket) {
cout << "[Disconnection] clients: " << --connections << endl;
});
server.run();
}
- Valgrind clean
- Autobahn chapters 1 - 9 all pass.
- Small & efficient code base.
- First install the dependencies (openssl, libuv)
git clone https://github.com/alexhultman/uWebSockets.git && cd uWebSockets
make
sudo make install
This will install to /usr/lib64 and /usr/include.
todo