Rust WebRTC P2P #5 - Hello World + Tokio Runtime + Cargo.toml
Bài 55:13

Rust WebRTC P2P #5 - Hello World + Tokio Runtime + Cargo.toml

Khám phá Cargo.toml — trái tim quản lý dependencies của mọi dự án Rust. Khai báo các thư viện sẽ dùng xuyên suốt khóa học: Axum, Tokio, Serde, DashMap, UUID, Log4rs, Anyhow. Cấu hình Tokio Runtime biến hàm main thành async, tận dụng thread pool xử lý hàng nghìn kết nối đồng thời. Kết thúc bằng việc chạy thành công project Hello World đầu tiên.

1. Cargo.toml — Trái tim quản lý dependencies

Cargo.toml là file cấu hình trung tâm của mọi dự án Rust: • [package]: Tên project, version, edition (2021) • [dependencies]: Danh sách thư viện bên ngoài (crates) • Mỗi dependency có thể chỉ định version, features cụ thể Ví dụ: tokio = { version = "1", features = ["full"] } → Sử dụng Tokio với tất cả features bao gồm runtime, io, net, sync, time.

2. Dependencies sử dụng trong khóa học

Các thư viện sẽ dùng xuyên suốt khóa học: • Axum — Web framework nhẹ, hiệu năng cao, built on top of Tokio • Tokio — Async runtime cho Rust, hỗ trợ multi-threaded task scheduling • Serde + serde_json — Serialization/Deserialization (JSON ↔ Rust struct) • DashMap — Concurrent HashMap, thread-safe mà không cần Mutex • UUID — Sinh unique identifier cho mỗi user/session • Log4rs — Logging framework linh hoạt với multiple appenders • Anyhow — Simplified error handling cho application code

3. Tokio Runtime là gì?

Tokio là async runtime phổ biến nhất của Rust: • Biến hàm main thành async với macro #[tokio::main] • Multi-threaded runtime: Tận dụng tất cả CPU cores • Task scheduling: Hàng nghìn async task chạy đồng thời trên thread pool nhỏ • Không tạo OS thread cho mỗi connection → Tiết kiệm memory, xử lý 10K+ connections dễ dàng So sánh: Node.js chạy single-threaded event loop, Tokio chạy multi-threaded event loop.

4. Hello World với Tokio

Chuyển từ synchronous main sang async main: • Thêm #[tokio::main] macro trước fn main() • Hàm main trở thành async fn main() → Có thể dùng .await • Tokio tự động tạo thread pool và scheduler • Mọi I/O operation (network, file) đều non-blocking Kết quả: Chạy thành công project Hello World đầu tiên với Tokio runtime — nền tảng cho toàn bộ signaling server.

5. Bước tiếp theo

Sau bài này, bạn đã có: • Project Rust với đầy đủ dependencies • Tokio runtime sẵn sàng xử lý async operations • Hiểu vai trò của từng thư viện trong hệ thống → Bài tiếp theo sẽ bắt đầu xây dựng HTTP server với Axum và thiết lập WebSocket endpoint cho signaling.

Khóa học thực chiến giúp bạn xây dựng từ đầu một Signaling Server bằng Rust, xử lý các cuộc gọi audio/video trực tiếp giữa hai trình duyệt thông qua WebRTC Peer-to-Peer mà không cần Media Server. Bạn sẽ nắm vững kiến trúc WebRTC signaling, cách trao đổi SDP Offer/Answer và ICE Candidates giữa các peer thông qua WebSocket. Khóa học sử dụng Axum + Tokio cho backend, MongoDB để lưu trữ dữ liệu, và JWT để xác thực người dùng. Đây là Phần 1 trong series 7 phần về Lập trình Rust với VoIP, bao gồm: WebRTC P2P, Media Server (Janus, LiveKit, Kurento, Asterisk, FreePBX), và hệ thống CRM/Queue/nhạc chờ/chuyển tiếp cuộc gọi. Yêu cầu tiên quyết: Kiến thức cơ bản về Rust (Ownership, Lifetimes, Traits, Async/Await).

Công nghệ sử dụng

RustWebRTCVoIPP2PAxumTokioWebSocketMongoDBJWT

Tác giả

ByteBuffer

ByteBuffer

Coder cỏ tại DTS Group và IPA Solutions

Chuyên gia về Rust và hệ thống VoIP/WebRTC. Nhiều năm kinh nghiệm xây dựng các hệ thống real-time communication với hiệu năng cao và độ trễ thấp.