
Assign unique user ids with an atomic counter using fetch_add and relaxed ordering, and store connections in a Rocket managed chatroom registry (hash map) with thread-safe access.
Use arcs and Tokio mutexes to share and mutate a chatroom across threads in a real-time Rust web app, while scoping locks to avoid deadlocks and enable message broadcast.
Develop a backend that serializes chat messages to json for a websocket stream, using a chat message struct with author and createdat timestamp via chrono.
Store each user's username in a chatroom connection and insert it into the mutex-protected connections map; broadcast username updates to the frontend via a dedicated send_username function.
WebSocket is a computer communications protocol, providing full-duplex communication channels over a single TCP connection. The WebSocket protocol enables interaction between a web browser (or other client application) and a web server with lower overhead than half-duplex alternatives such as HTTP polling, facilitating real-time data transfer from and to the server.
Rust is a systems programming language which you can use to write applications with high performance. It is amazingly refreshing with a very helpful compiler who is your mentor since the very beginning.
Given that the WebSocket protocol is key for real-time applications, where reliability and speed matter, it is no wonder that Rust is the best option for implementing WebSocket servers.
Also given that Rust can now run in the browser, thanks to WebAssembly, we can also use Rust on the client.
Which means that one can code a real-time, chat-like application 100% in just Rust!
This is what we will do in this course! We will leverage Tokio and Rocket in the back-end, yew webassembly and trunk in the front-end and we will end up with a full-stack Rust, real-time chat app. While doing that we will learn how to set-up a WebSocket connection, send/receive messages and update out application state.