Add 'ideas/realtimenetworking.md'
This commit is contained in:
parent
8716ba5555
commit
88a4a5d385
|
@ -0,0 +1,77 @@
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
All references to "ass" in the following are courtesy of StrangeZak.
|
||||||
|
|
||||||
|
### Prereqs
|
||||||
|
|
||||||
|
- TCP/UDP
|
||||||
|
- Packets and ordering
|
||||||
|
- Sockets
|
||||||
|
- Port forwarding, firewalls - context for why you might do NAT punching
|
||||||
|
- hey ive heard of this thing called "web sockets"
|
||||||
|
- tcp over tcp, baby
|
||||||
|
- Blocking vs. non-blocking sockets
|
||||||
|
- Peer-to-peer / network topology
|
||||||
|
- why peer to peer is ass
|
||||||
|
- NAT punching: STUN/ICE/TURN
|
||||||
|
- Types of NATs (carrier-grade vs. normal)
|
||||||
|
- WebRTC
|
||||||
|
- UPNP (auto port forwarding) (possibly an aside?)
|
||||||
|
- security problems
|
||||||
|
- please do not
|
||||||
|
- Handshakes / authentication
|
||||||
|
|
||||||
|
### Games
|
||||||
|
|
||||||
|
- Code structuring for games
|
||||||
|
- the way every game handles you know replicating eneitites to other clients is very different so you have ot pick the one that you think is least ass
|
||||||
|
- they are all ass
|
||||||
|
- Prediction / rollback
|
||||||
|
- Older model: every input is sent to the server, server sends state to clients
|
||||||
|
- Newer model: local game is simulated independently, corrected by the server as it goes (prediction and rollback)
|
||||||
|
- How some games might do this
|
||||||
|
- Unreal: go over all connections, iterate all actors, see if actor is relevant, delta, bunch, send
|
||||||
|
- typical of big shooter games - you want to be able to control relevancy of data per connection (e.g. what is in view)
|
||||||
|
- Simple 2D game: send the whole state
|
||||||
|
- Server / client authority
|
||||||
|
- RPCs
|
||||||
|
|
||||||
|
### Audio / video streaming
|
||||||
|
|
||||||
|
- Packet framing (deltas / key frames / error correction)
|
||||||
|
- I, P, and B-frames (for video)
|
||||||
|
|
||||||
|
### Collaborative editing
|
||||||
|
|
||||||
|
- CRDTs...? Operational transforms?
|
||||||
|
|
||||||
|
## Possible applications of real-time networking
|
||||||
|
|
||||||
|
- Multiplayer games
|
||||||
|
- Collaborative editing
|
||||||
|
- Real-time communication (audio/video)
|
||||||
|
|
||||||
|
## Useful practice projects
|
||||||
|
|
||||||
|
These would all need to be written and vetted by the community. We're not going to find good examples of this lying around.
|
||||||
|
|
||||||
|
- Basic multiplayer game with rollback
|
||||||
|
- Online voice chat
|
||||||
|
- Figma-like?
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- I, P, and B-frames: https://ottverse.com/i-p-b-frames-idr-keyframes-differences-usecases/
|
||||||
|
- https://discord.com/channels/239737791225790464/727209479602438265/973342326644703262
|
||||||
|
- Overwatch Gameplay Architecture and Netcode: https://www.youtube.com/watch?v=zrIY0eIyqmI
|
||||||
|
- Zak says: Best explanation of modern techniques by far. Ignore the game architecture part.
|
||||||
|
- https://www.deconstructconf.com/2019/ayla-myers-multiplayer-game-networking-the-brute-force-approach
|
||||||
|
- https://www.ggpo.net/
|
||||||
|
- Opus spec: https://datatracker.ietf.org/doc/html/rfc6716
|
||||||
|
-
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue