uWebSockets.js/README.md

61 lines
2.8 KiB
Markdown
Raw Normal View History

2019-01-15 13:33:43 +00:00
<div align="center">
2020-06-07 08:50:19 +00:00
<img src="https://raw.githubusercontent.com/uNetworking/uWebSockets/master/misc/logo.svg" height="180" /><br>
<i>Simple, secure</i><sup><a href="https://github.com/uNetworking/uWebSockets/tree/master/fuzzing#fuzz-testing-of-various-parsers-and-mocked-examples">[1]</a></sup><i> & standards compliant</i><sup><a href="https://unetworking.github.io/uWebSockets.js/report.pdf">[2]</a></sup><i> web server for the most demanding</i><sup><a href="https://github.com/uNetworking/uWebSockets/tree/master/benchmarks#benchmark-driven-development">[3]</a></sup><i> of applications.</i> <a href="https://github.com/uNetworking/uWebSockets/blob/master/misc/READMORE.md">Read more...</a>
<br><br>
2018-11-04 23:00:00 +00:00
2018-07-28 20:48:22 +00:00
2020-06-07 08:50:19 +00:00
<a href="https://github.com/uNetworking/uWebSockets.js/releases"><img src="https://img.shields.io/github/v/release/uNetworking/uWebSockets.js"></a> <a href="https://lgtm.com/projects/g/uNetworking/uWebSockets.js/context:cpp"><img alt="Language grade: C/C++" src="https://img.shields.io/lgtm/grade/cpp/g/uNetworking/uWebSockets.js.svg?logo=lgtm&logoWidth=18"/></a> <img src="https://img.shields.io/badge/downloads-50,000,000+-green" />
2019-08-19 00:38:46 +00:00
2019-01-15 13:33:43 +00:00
</div>
2020-06-07 08:50:19 +00:00
<br><br>
2019-01-15 13:33:43 +00:00
2019-03-13 20:28:39 +00:00
#### In a nutshell.
2018-12-26 08:15:31 +00:00
2019-11-15 00:00:01 +00:00
Think of it as a complete replacement to both Express.js and Socket.IO, written entirely in C/C++ for maximum performance and reliability. There are tons of [examples](examples) but here's the gist of it all:
2019-02-10 23:13:51 +00:00
2019-01-15 13:33:43 +00:00
```javascript
2019-04-22 22:54:56 +00:00
/* Non-SSL is simply App() */
require('uWebSockets.js').SSLApp({
2019-02-10 23:13:51 +00:00
2019-03-13 19:52:46 +00:00
/* There are tons of SSL options */
2019-02-10 23:13:51 +00:00
key_file_name: 'misc/key.pem',
cert_file_name: 'misc/cert.pem',
2019-04-22 22:54:56 +00:00
2019-02-10 23:13:51 +00:00
}).ws('/*', {
2019-04-22 22:54:56 +00:00
2019-03-13 19:52:46 +00:00
/* For brevity we skip the other events */
2019-02-10 23:13:51 +00:00
message: (ws, message, isBinary) => {
let ok = ws.send(message, isBinary);
}
2019-04-22 22:54:56 +00:00
2019-02-10 23:13:51 +00:00
}).any('/*', (res, req) => {
2019-04-22 22:54:56 +00:00
2019-03-13 19:52:46 +00:00
/* Let's deny all Http */
2019-02-10 23:13:51 +00:00
res.end('Nothing to see here!');
2019-04-22 22:54:56 +00:00
2019-03-13 19:52:46 +00:00
}).listen(9001, (listenSocket) => {
2019-04-22 22:54:56 +00:00
2019-03-13 19:52:46 +00:00
if (listenSocket) {
console.log('Listening to port 9001');
2018-11-04 23:00:00 +00:00
}
2019-04-22 22:54:56 +00:00
2018-10-04 21:18:50 +00:00
});
2018-07-28 20:48:22 +00:00
```
2018-11-03 11:45:56 +00:00
2019-04-22 22:54:56 +00:00
#### Ready all thrusters.
2020-06-05 15:59:22 +00:00
Install with `npm install uNetworking/uWebSockets.js#v18.0.0` or any such [release](https://github.com/uNetworking/uWebSockets.js/releases). No compiler needed.
2019-04-22 22:54:56 +00:00
![](misc/features_strip.png)
2020-04-12 19:17:13 +00:00
Real-world tests over TLS 1.3 and Ethernet puts us **5x** as efficient as Socket.IO, **2x** as efficient as websockets/ws.
2019-03-13 20:28:39 +00:00
#### Pay what you want.
2019-03-13 19:52:46 +00:00
Commercially developed on a sponsored/consulting basis; BitMEX, Bitfinex and Coinbase are current or previous sponsors. Contact [me, the author](https://github.com/alexhultman) for support, feature development or consulting/contracting.
2019-01-15 13:33:43 +00:00
2019-03-13 19:52:46 +00:00
![](https://raw.githubusercontent.com/uNetworking/uWebSockets/master/misc/2018.png)
2019-01-15 13:33:43 +00:00
2019-04-22 22:54:56 +00:00
#### Know thy legal matters.
2019-03-13 19:52:46 +00:00
*µWebSockets.js is intellectual property licensed Apache 2.0 with limitations on trademark use. Forks must be clearly labelled as such and must not be confused with the original.*