Reliability types for RemoteEvent

As a Roblox developer, it is currently impossible to send network messages over anything other than a reliable ordered channel. This is a huge problem for networked game state that needs to be sent very frequently. Re-transmissions and acknowledgements are nice for data that must get there eventually, but it really blows for state that is just going to be immediately sent again in the next network step.

The biggest use case for something like this is custom character replication. We only care about the most recent position and orientation of a replicated character, and we don’t want old stale state to be re-transmitted to us.

I propose adding the property RemoteEvent.Reliability which determines the reliability type of network messages sent using it. This property would be an enum, and could include ReliableOrdered (the way it works now), Unreliable (packets may be dropped), and UnreliableSequenced (same as unreliable, but only the most recent message is accepted).

Being able to send unreliable messages is a bare necessity for creating low-latency multiplayer games. In my opinion this would allow developers to fine tune their games’ networking in order to deliver a more consistent experience.

164 Likes

Support. This would be invaluable for things like sending player position data, where we don’t care about the position one second ago - if we missed it, we’ll get another message right away!

18 Likes

This would be very useful. I can already imagine things that would become just better, like my custom vehicles.

Hopefully we can get something like this.

5 Likes

I’m bringing this back up, since I think this is one of the things that makes it impossible to make your game’s code 100% secure; right now, network ownership and physics simulation in general are finicky and easily exploitable. A client can fly around, phase through walls, fling other players off the map, and there’s not much that can be done to stop it (other than anti-cheat systems that may have false positives). With unreliable signals, custom humanoids and physics systems could be implemented to make more secure games.

Of course, we still don’t have much control over the physics system either, so even with this we would (with the current APIs) have to rely on the internal replicated physics system and the unsecured nature of network ownership, but having a simple property to make remotes unreliable would be the first step in making custom/secure characters easier.

22 Likes

This would be an amazing feature and I’d really appreciate them adding it. I have a lot of dream games I want to do that rely on combat built around timing , but they’re basically impossible without this

More details here on the issues with remotes right now:

https://devforum.roblox.com/t/serious-issue-with-remotes-on-roblox/755499

11 Likes

I personally feel that this is more than just something that would be nice to have. It’s simply a necessity for the future of the platform– specific fast-paced gameplay cannot function with the current delay, and this feature request is a healthy step in the right direction.

It’s invaluable in a multitude of different use cases.

Please, please, please, look into this ASAP.

7 Likes

Bringing this back up because unreliable packets are simply a necessity to develop smooth moving characters especially in pvp settings.
Currently everytime you drop a packet roblox will essentially halt all network traffic for ~half a second until the dropped packet gets resent from the server.
To illustrate how bad the problem actually is I created a visual example what it currently looks like when your drop a packet.

The server is moving the brick at 60 HZ, at 0% packetloss, pretty smooth:

Now I introduced 1% packetloss via a network emulator which is still considered perfectly normal depending on where you live and wouldn’t cause any problems even in most fast paced online FPS-games.
You can visually see everytime a packet gets dropped and the ping goes all over the place:

This is what 5% packetloss looks like which should still be managable with unreliable replication, notice how the ping goes back to normal as soon as the network emulator stops dropping packets near the end of the video:

There is only so much interpolation can achieve if you have to work with constant 500ms ping spikes.

25 Likes

This should be relevant as I did some more testing on the effects packetloss currently has on remote events/remote functions:
https://devforum.roblox.com/t/some-notes-on-the-reasons-for-pingspikes-and-how-roblox-handles-packetloss/1151378

Furthermore physics replication seems to be more or less unaffected by packetloss based on my testing.
Roblox’s own character replication works kind of works even with unrealistically high packetloss scenarios as in the positioning of characters will unaffected by the packetloss induced high ping while character animations will wait in the queue as they rely on property updates instead of physics to replicate resulting in the characters playing the wrong animations for what they are doing.

5 Likes

I wrote a blog post detailing a very simple example on why this feature is critically necessary:

21 Likes

Gotta vouch pretty heavily for this idea. Networking on Roblox as-is has issues, but this is the biggest one for certain. @Kampfkarren’s blog post above has an excellent use case that can be applied to a broad developer need.

3 Likes

Recently spoke with @zeuxcg on this! They have plans to expose better control over remote event delivery including reliability and priority controls. No designs or ETA on this yet sadly.

@Kampfkarren’s blog post makes an excellent point on why allowing us to send events on an unreliable channel, this is especially useful with degraded network conditions.

9 Likes