Over the last week I've invested a lot of time trying to figure out why I'm experiencing this issue. If I just start up the game and drive around in free play I will all of the sudden notice that my input is affected.
Not interested in the technical rant? I put a summary at the bottom.
When you start up RL it will perform a POST request to a REST API that will authenticate the player. You will also receive information about events and whether the RL stream is live. This part of the application is hosted on google pages and by DNS resolution you will find the shortest path. So no matter where you are in the world you will have fairly low latency to this endpoint.
The information received from this endpoint will be used to initiate a WebSocket connection. This is where I start to experience problems, as it turns out this is a statically hosted service based in the states. Since I'm from Europe I will naturally have a higher latency to this endpoint. So why does this matter?
First just a little information. I've tried every thing I can think of to eliminate the problem. Here's a few of them:
Made sure power saving options were turned off: This is a common problem that may cause similar issues so I've eliminated every power saving option I can find. Ranging from C1E,C2 etc. settings in the bios to SpeedStepping and power saving in Windows (both OS and in Nvidia Control Panel).
Changing controllers: I have access to a ds4v1, ds4v2, xb1 and x360. No matter which one I use the same problem occurs
Different Computers: With different versions of Windows, it just carries over.
Tweaking every possible setting: This was only done on one of the computers but they still persisted on the other one.
Linux with -ck patchset: The game just doesn't feel right on this platform, even with the ck patchset so it was hard to determine if in input was affected.
So why does latency matter?
I had a theory, the game is driven by a REST API in the back. At first I didn't know about the WebSocket and I also assume that is a fairly new feature based on the information I found regarding people reverse engineering the API in the past. Running the game with a logger attached (-log
as a launch option) it will pretty much tell you about every call it attempts. This is the same as the output in your Launch.log file.
I suspected that the calls somehow caused slowdowns to my input so to test this further I increased my latency with a testing tool called clumsy. This will emulate poor networking conditions and is used for testing how applications behave in different situations. Knowing these calls are REST driven I increased my latency outgoing on port 443 (https). When the calls started occurring against the backend I noticed my input slowed down way more than previously. At this point I can barely turn my car anymore (even with a deadzone of 0.07).
That was pretty weird.. I turned it off and tried again and noticed my problem somehow persisted even without the increased latency. I can barely move my car at this point. But I turned it off so the problem should go away, right?
Next up I attempted to MITM the connections made by RL, this is where I learn about the upgrade to the WebSocket. So I start reading the payloads of these packets. The game communicates with JSON payloads and base64 encoded data. All of your settings are stored on Psyonix servers, it doesn't matter if you delete your save files or disable steam cloud sync. The latter which only seems to act as a storage to alleviate stress on the Psyonix servers since they only check to see if checksums match between you and their servers and everything is divided into smaller modules.
Psyonix_Cone has explained what the latency data is actually used for in the comments below
Your save file pretty much consists of different categories labeled Setting_TA. Among these you'll find most of your configuration to input so that they persist when you move to a different computer. Among these we find ConnectionQualitySave_TA, so Psyonix is trying to determine the quality of my connection, what does that mean? An educated guess at this point is that they don't want the WebSocket to affect your connection when you're playing online, so they keep track of the latency to the WebSocket itself to determine how fast you should retrieve data from it to not affect gameplay.
Your client constantly sends updates to the WebSocket, a lot of calls are made to a service called Metrics/RecordMetrics where you send updates about your current game (even if you're just in practice) and even what song you listen to in game. The one event that caught my attention was PsyNet.ServiceCalls which keeps track of your latency to different endpoints. Among these I find a lot of values well in their 20s which I assume is the timeout. Running the latency tool from before I have effectively ruined my AvgLatency that I've also shared up the stream with Psyonix.
No problem, RL is on sale. I buy another account on a chance to start fresh. I make sure I delete every trace of RL in %userprofile%\Documents\my games\Rocket League to rule out that it inherits the save data somehow. New account is set up, buy RL, configure my settings. Queue up and try to play a game, but it doesn't take long until my car is effectively a brick and I can barely steer anymore. How is that even possible?
I hook up my phone and route the traffic through 4G instead and notice it's not as bad as before. So it's possible that they determine my AvgLatency based on my outgoing IPv4 address. This doesn't seem fair, if my connection is acting up or if something's wrong with my computer they degrade my connection and possibly store this information on their side just do determine the best strategy for my connection. If you experience similar issues as me and you have no choice but to play on WiFi you might be in for a surprise (All of my testing is done on a wired connection though).
edit: Still trying to figure out what may have caused the delayed input beyond this point. I may have resolved this particular issue but I need to test it some more to be sure.
So to summarize: My findings may not be related to similar problems you may experience.
I think my game might be affected by RPC calls that are throttled which somehow affects input (same thread within the game?).
The WebSocket connection is only available in the states. I average 137ms to it, you can try to ping rl-psy.net
yourself.
Connection quality is based on AvgLatency to the WebSocket which isn't fair since it's halfway across the globe from me.
If your ISP hands out dynamic IPs you get more chances to prove that your connection is fine.
Connections that are not full duplex might put a permanent marker on your connection stats if your phone so much as updates an app while RL is collecting latency statistics.
If you wish to try my theory about latency, be careful. Running clumsy might degrade your connection quality and be stored with Psyonix.
To reiterate:
You can reproduce this behavior by deliberately increasing your latency to the host rl-psy.net
on port 443 using a tool like clumsy but it will permanently affect your experience for the worse.