Original Post — Direct link

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.

External link →
over 6 years ago - /u/Psyonix_Cone - Direct link

Hello! Thank you for this investigation. The heavy car issue is an elusive beast and we appreciate any community help in resolving this matter. Connecting to PsyNet with high latency should not have any effect on player input, but I'll try it out on Monday to see what happens. To aid in your investigation, here are some points regarding things mentioned in this post:

  • PC has only been using websockets since April 24. Prior to that communication with PsyNet has been through stateless https requests. So unless your issues just started in the last few days, I wouldn't assume websockets are the culprit.

  • ConnectionQualitySave just tracks your latency, packet loss, etc to the game servers over multiple matches. This information is used to display a pop-up linking to a support document if a user has recurring connection issues. It is not used to affect your connection settings.

  • The PsyNet.ServiceCalls metric is just metrics we record that measures how often particular PsyNet service calls are made, how long they take, and whether or not they failed. It is not used to affect your connection settings.

  • We do not track or transfer any data or metrics by IP address.

Some questions I have for you:

  • When you say you can barely steer: do you mean the steering is delayed, or you actually cannot steer at all?

  • Is the issue constant, or intermittent? When you run with -log does it seem to coincide with output in the log?

  • Do you experience the issue if you just launch the game and go into training, without playing online at all?

  • Do you experience the problem if you launch the game in offline mode? This will prevent it from connecting to PsyNet.