WPPServer poslužiteljski je dio fullstack aplikacije za real-time komunikaciju pomoću WebSocketa (poruke i signalizacija) i WebRTC (video pozivi). Izgrađen je pomoću Actix Web frameworka za izradu Rest API-ja. Server sluša na definiranom portu za HTTP requestove te na ruti /ws/ dopušta UPGRADE na WebSocket konekciju. Serveru su također potrebni UDP portovi za Mediasoup konekcije (audio/video).
Prije no što možeš build-ati cijeli projekt, moraš instalirati neke alate. Treba ti Rust (verzija 1.85 ili veća), g++ (verzija 8 ili veća) ili clang (sa podrškom za C++ 17) te cc i c++ moraju biti sym-linkani te pokazivati na gcc/g++ ili clang/clang++.
Poslužitelj ovisi o nekim drugim alatima.
Zbog jednostavnosti, pri developmentu poslužitelja, oslonio sam se na
Cloudflare TURN Server.
Ako ne želite ovisiti o Cloudflare-u, dovoljno je postaviti ICE_SERVERS
env varijablu te compile-ati sa flag-om --no-default-features. Više informacija
o TURN-u
i STUN-u.
Za potrebe sinkronizacija WebSocket konkecija između Actix radnika, koristimo
Redis. Redis je in-memory key-value baza podataka,
najčešće korištena kao ditribuirani cache ili broker poruke. Poslužitelj koristi
Redis-ov Pub/Sub mehanizam za
dostavljanje poruka između raznih Actix radnika ili više instanci servera.
Definiramo poslužitelju Redis pomoću REDIS_URL env varijable.
Zbog jednostavnosti i brzine razvoja, odabran je MongoDB
kao glavna baza podataka. MongoDB je dokument orijentirana baza podataka klasificirana
kao NoSQL. Definiramo poslužitelju MongoDB pomoću MONGODB_URL env varijable.
Za pokretanje poslužitalja potrebno nam je mnoštvo env varijabli. Možemo ih koristiti na standardni način ili definirati .env datoteku.
MONGODB_URL=
SECRET_KEY=
PORT= # http/ws port
REDIS_URL=
# Cloudflare
CF_TOKEN=
CF_ID=
# no Cloudflare
ICE_SERVERS={\"iceServers\":[{\"urls\":\"stun:stun.l.google.com:19302\"}]}
# binding ip (use 0.0.0.0 inside Docker)
HOST=127.0.0.1
# announce ip
HOST_URL=127.0.0.1
# UDP port range
PORT_MIN=40000
PORT_MAX=40100Osnovna komanda za pokretanje izvornog koda je
cargo runAko želimo compile-ati sa svim optimizacijama koristimo flag --release
cargo run --releaseIsto vrijedi za flag --no-default-features.
Također možemo umjesto direktnog pokretanja samo buildati binary.
cargo build --releaseNovo izgraženi binary nalazi se u ./target/<debug|release>/wpp-server(.exe)
Za standardiziranije pokretanje (npr. ako želimo koristiti neki VPS ili Google Cloud run) možemo koristiti Docker.
docker build -f Dockerfile -t wpp-server .
docker run --env-file .env -d wpp-server