diff options
Diffstat (limited to 'packages/bun-uws/examples/HelloWorldThreaded.cpp')
-rw-r--r-- | packages/bun-uws/examples/HelloWorldThreaded.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/bun-uws/examples/HelloWorldThreaded.cpp b/packages/bun-uws/examples/HelloWorldThreaded.cpp new file mode 100644 index 000000000..e4d871f65 --- /dev/null +++ b/packages/bun-uws/examples/HelloWorldThreaded.cpp @@ -0,0 +1,40 @@ +#include "App.h" +#include <thread> +#include <algorithm> +#include <mutex> + +/* Note that SSL is disabled unless you build with WITH_OPENSSL=1 */ +const int SSL = 1; +std::mutex stdoutMutex; + +int main() { + /* Overly simple hello world app, using multiple threads */ + std::vector<std::thread *> threads(std::thread::hardware_concurrency()); + + std::transform(threads.begin(), threads.end(), threads.begin(), [](std::thread */*t*/) { + return new std::thread([]() { + + uWS::SSLApp({ + .key_file_name = "misc/key.pem", + .cert_file_name = "misc/cert.pem", + .passphrase = "1234" + }).get("/*", [](auto *res, auto * /*req*/) { + res->end("Hello world!"); + }).listen(3000, [](auto *listen_socket) { + stdoutMutex.lock(); + if (listen_socket) { + /* Note that us_listen_socket_t is castable to us_socket_t */ + std::cout << "Thread " << std::this_thread::get_id() << " listening on port " << us_socket_local_port(SSL, (struct us_socket_t *) listen_socket) << std::endl; + } else { + std::cout << "Thread " << std::this_thread::get_id() << " failed to listen on port 3000" << std::endl; + } + stdoutMutex.unlock(); + }).run(); + + }); + }); + + std::for_each(threads.begin(), threads.end(), [](std::thread *t) { + t->join(); + }); +} |