30 releases (18 breaking)
0.23.0 | Sep 17, 2024 |
---|---|
0.22.0 | Jan 10, 2024 |
0.21.1 | Aug 25, 2023 |
0.21.0 | Apr 23, 2023 |
0.1.2 | Jul 7, 2020 |
#190 in Network programming
47 downloads per month
Used in 8 crates
(4 directly)
520KB
13K
SLoC
naia
a networking architecture for interactive applications
A cross-platform (including Wasm!) networking engine that intends to make multiplayer game development in Rust dead simple and lightning fast.
naia helps you to easily define a common, shared Protocol that allows Server & Client to exchange information. Then, naia facilitates sending/receiving parts of that Protocol as reliable/unreliable Messages between Server & Client, and also keeps a pool of tracked Entities synced with each Client for whom they are "in-scope". Entities are "scoped" to Clients with whom they share the same Room, as well as being sufficiently customizable to, for example, only keep Entities persisted & synced while within a Client's viewport or according to some other criteria.
The API is heavily inspired by the Nengi.js & Colyseus Javascript multiplayer networking libraries. The internals follow the Tribes 2 Networking model fairly closely.
Thank very much to Kyren for support & webrtc-unreliable, and to the Laminar authors, for the cannibalized code within.
Any help is very welcome, please get in touch! I am open to any criticism / feedback in order to better this project.
Currently guaranteed to work on Web & Linux, although Windows & MacOS have been reported working as well. Please file issues if you find inconsistencies and I'll do what I can.
For more detailed information, please look at the FAQ.
Demos
More comprehensive documentation / tutorials are on their way, but for now, the best way to get started with naia is to go through the basic demo, which demonstrates most of the functionality.
Server:
To run the UDP server demo on Linux: (that will be able to communicate with Linux clients)
1. cd /naia/demos/basic/server
2. cargo run
To run the WebRTC server demo on Linux: (that will be able to communicate with Web clients)
1. // go to (https://docs.rs/openssl/latest/openssl/) to install openssl on your machine
2. cd /naia/demos/basic/server
3. cargo run
Client:
To run the UDP client demo on Linux: (that will be able to communicate with a UDP server)
1. cd /naia/demos/basic/client/wasm_bindgen
2. cargo run
To run the WebRTC client demo on Web: (that will be able to communicate with a WebRTC server)
1. cargo install cargo-web // should only need to do this once if you haven't already
2. cargo install cargo-make // should only need to do this once if you haven't already
3. cd /naia/demos/basic/client/wasm_bindgen
4. make serve
5. Web page will be blank - check debug console to see communications from the server
Known Issues
To run a miniquad client you will require the following be installed
sudo apt-get install libxi-dev libgl1-mesa-dev
Dependencies
~2.2–6.5MB
~117K SLoC