aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-uws/examples/HelloWorldThreaded.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-uws/examples/HelloWorldThreaded.cpp')
-rw-r--r--packages/bun-uws/examples/HelloWorldThreaded.cpp40
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();
+ });
+}