EsotericSoftware / kryonet

TCP/UDP client/server library for Java, based on Kryo
BSD 3-Clause "New" or "Revised" License
1.81k stars 416 forks source link

Feature Request: RMI over UDP #73

Closed hardtoe closed 9 years ago

hardtoe commented 9 years ago

I would like to use kryonet for a simple game engine with client/server. I have some bulk data I want to transfer using RMI over TCP. But the entity updates I want to transfer using RMI over UDP.

For my purposes I would want a sequence number on the UDP RMI calls so old calls can be dropped instead of called out of order. This could be implemented above the RMI layer but it would have to be re-implemented for each RMI method. Ideally the UDP RMI calls could be configured for automatic "out of order call drop" behavior where the RMI server sends a sequence number for each packet type and the RMI client drops packets with a sequence number less than the last successfully received sequence number.

As for configuring RMI calls for TCP vs. UDP I would like to be able to use annotations. However there is already a configuration mechanism in the RemoteObject class that might be a better fit.

NathanSweet commented 9 years ago

This could result in a method blocking indefinitely or until the timeout due to the request or the response not being delivered. It's probably better to not use RMI for UDP.

On Wed, Sep 3, 2014 at 4:37 PM, Luke Valenty notifications@github.com wrote:

I would like to use kryonet for a simple game engine with client/server. I have some bulk data I want to transfer using RMI over TCP. But the entity updates I want to transfer using RMI over UDP.

For my purposes I would want a sequence number on the UDP RMI calls so old calls can be dropped instead of called out of order. This could be implemented above the RMI layer but it would have to be re-implemented for each RMI method. Ideally the UDP RMI calls could be configured for automatic "out of order call drop" behavior where the RMI server sends a sequence number for each packet type and the RMI client drops packets with a sequence number less than the last successfully received sequence number..

As for configuring RMI calls for TCP vs. UDP I would like to be able to use annotations. However there is already a configuration mechanism in the RemoteObject class that might be a better fit.

— Reply to this email directly or view it on GitHub https://github.com/EsotericSoftware/kryonet/issues/73.

hardtoe commented 9 years ago

I would expect all RMI UDP calls to be non-blocking and must be void.

Edit: The return value is void. So it's one-way best-effort communication only.

hardtoe commented 9 years ago

The commit looks great. I'll be giving this a try soon. How often do you release to Maven?