From 5889a2ec33faa73b38ef3264206e0733b6a4af7e Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Sat, 25 Aug 2018 10:04:14 +0200 Subject: [PATCH] Update front page --- 2018.png | Bin 0 -> 17927 bytes README.md | 32 +++++++++++++++++--------------- logo.png | Bin 0 -> 16681 bytes 3 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 2018.png create mode 100644 logo.png diff --git a/2018.png b/2018.png new file mode 100644 index 0000000000000000000000000000000000000000..98b7b8b1038e7bb8ed6b75087f26211126cfc4a5 GIT binary patch literal 17927 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 Tva7(HmK#syRAtMg%|iYUI{Sx( literal 0 HcmV?d00001 diff --git a/README.md b/README.md index ccf9056..6486281 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,16 @@ -# v0.15 of µWebSockets +
-µWS ("[micro](https://en.wikipedia.org/wiki/Micro-)WS") is a modern C++17 implementation of WebSockets & HTTP. It focuses on performance & memory usage and has been shown to outperform Node.js v10 some 13x (8x with SSL) while still being just as easy to work with. +µWS ("[micro](https://en.wikipedia.org/wiki/Micro-)WS") is simple and efficient message passing for the modern web. -µWS v0.15 is about 20% faster than v0.14 for small sends, 260% faster for large sends (50 MB). +* Read the [fancy pants details & user manual](https://todo.sometime). -#### Pub/sub -One of the most popular usages of WebSockets is to deliver a message sent under a topic to all subscribers of said topic. This functionality is easy to implement and even easier to completely mess up, resulting in a very inefficient solution. - -With v0.15 we now have built-in protocol independent pub/sub support delivering top notch broadcast performance. - -```c++ -ws->sub("some/topic/*"); -ws->pub("another/topic/here", message); -``` - -#### Build optimized WebSocket & HTTP servers & clients in no time. +#### Build optimized, standard web clients & servers in no time. ```c++ uWS::App a; // or uWS::SSLApp(options) for SSL a.onGet("/", [](auto *s, auto *req, auto *args) { - s->writeStatus(200)->writeHeader("Hello", "World")->end(buffer, 512); + s->writeStatus("200 OK")->writeHeader("Hello", "World")->end(buffer); }).onGet("/largefile", [](auto *s, auto *req, auto *args) { @@ -52,3 +42,15 @@ a.onGet("/", [](auto *s, auto *req, auto *args) { }).listen("localhost", 3000, 0); ``` +#### Deploy with confidence. +Feeling uncertain about your design? In need of professional help? Want to talk about the weather? I might have a few consulting hours for you and your business, send [me, the author](https://github.com/alexhultman) a mail and we'll figure out the rest. + +#### Excel across the board. + + +#### Pay what you want. +A free & open source ([Zlib](LICENSE)) project since 2016. Kindly sponsored by [BitMEX](https://bitmex.com), [Bitfinex](https://bitfinex.com) & [Coinbase](https://www.coinbase.com/) in 2018. + +
+ +*Become a paying sponsor of the project to unlock support, issue reporting, roadmaps and to drop suggestions.* diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..baa47c5f42ebf49499dad26e47e6010a4590fd38 GIT binary patch literal 16681 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 Gh5SEl0wTr$ literal 0 HcmV?d00001