Rust va Axum frameworkdan foydalangan holda "Real-time Chat" serveri
Sizning Rust va Axum frameworkiga qiziqishingizni inobatga olgan holda, WebSocket texnologiyasi asosida ishlaydigan oddiy "Real-time Chat" serverini Rust tilida yozib beraman.
Bu misol messenger backendining eng asosiy qismi — server va mijoz o‘rtasida uzluksiz aloqa (persistent connection) qanday ishlashini ko‘rsatib beradi.
Loyiha strukturasi
Bizga 3 ta narsa kerak bo‘ladi:
Cargo.toml — Kutubxonalar.
main.rs — Backend (Rust + Axum).
index.html — Frontend (Oddiy HTML + JS).
1-qadam: Loyihani yaratish va kutubxonalar
Terminalda yangi loyiha oching:
Bash
cargo Cargo.toml fayliga quyidagi qatorlarni qo‘shing. Bu yerda biz Axum (web framework), Tokio (asinxron ishlash uchun) va Tower (fayllarni uzatish uchun) ishlatamiz.
Ini, TOML
[package]
name = 2-qadam: Backend kodi (src/main.rs)
Bu kod WebSocket ulanishini qabul qiladi va kelgan xabarni barcha ulangan foydalanuvchilarga "Broadcast" qiladi (tarqatadi).
Rust
use3-qadam: Frontend (index.html)
Loyiha papkasining o‘zida (src ichida emas, Cargo.toml yonida) index.html faylini yarating:
HTML
<!DOCTYPE Ishga tushirish
Terminalda:
cargo runBrauzerni ochib:
http://localhost:3000manziliga kiring.Sinash uchun: Brauzerda ikki yoki uchta alohida tab (oyna) oching va har biridan yozib ko‘ring. Biri yozganda, boshqalarida darhol paydo bo‘lishi kerak.
Bu kodda nima sodir bo'ldi?
Axum Router:
/wsmanziliga kelgan HTTP so'rovni WebSocket protokoliga "Upgrade" (yangilash) qildi.Tokio Broadcast: Bu xotiradagi "mini-Redis" kabi ishladi.
tx.send(msg)qilinganda, u xabarni barcha ulanganrx(tinglovchi)larga tarqatdi.Concurrency: Rust har bir foydalanuvchi uchun juda yengil
tokio task(yashil oqim) yaratdi. Bu 10,000 odam ulansa ham serverni qotirmaydi.
Haqiqiy katta loyihada (Production) broadcast::channel o‘rniga Redis Pub/Sub ishlatiladi, shunda bir nechta serverlar o‘zaro xabar almasha oladi.