ryzom / ryzomcore

Ryzom Core is the open-source project related to the Ryzom game. This community repository is synchronized with the Ryzom Forge repository, based on the Core branch.
https://wiki.ryzom.dev
GNU Affero General Public License v3.0
337 stars 90 forks source link

Use QUIC as second option for client/server protocol #628

Open kaetemi opened 3 years ago

kaetemi commented 3 years ago

The client/server protocol mainly consists of lossy position updates and lossless event impulses. Currently these are sent over a fixed rate UDP-based protocol.

QUIC would simplify sending the event impulses in a separate stream, decreasing latency and increasing bandwidth (both for the impulse events, and freeing up bandwidth in the position update packets.) It'd also enhance connection recovery.

kaetemi commented 2 years ago

Prioritized since Ryzom Forge team is interested in speeding up string transfer.

Plan is to keep the existing UDP packet format, and send that over QUIC as unreliable datagram instead.

Then flag any messages (IOS mainly) which can be sent out-of-band to be sent directly over the QUIC reliable stream.

https://quicwg.org/datagram/draft-ietf-quic-datagram.html

kaetemi commented 1 year ago

Can implement this without breaking compatibility. Use the same trick as SBS, run the service on a port offset of 2000 -5000.

Only the msg.xml changes to flag which messages can go over secondary streams will need to be shifted to 5.0, so the checksum is not broken.

kaetemi commented 1 year ago

QUIC connection datagram support is implemented and working for testing purposes on development targets. Next step is to support additional streams for the larger impulse data (mainly from IOS and DSS).