Analyzing Disconnects

For the king ошибка кода сети disconnect by client timeout

When you build an online multiplayer game, you have to be aware that sometimes connections between clients and servers fail.

Disconnects might be caused by software or hardware. If any link of a connection fails, messages get delayed, lost or corrupted and the connection need to be shut down.

If this happens frequently you can usually do something about it.

Contents

Disconnect Reasons

Client SDKs provide disconnection callbacks and a disconnect cause. Use those to investigate the unexpected disconnects you are having. Here we list the major disconnect causes and whether they are caused on the client or the server side.

Disconnects By Client

Disconnects By Server

Timeout Disconnect

Unlike plain UDP, Photon’s reliable UDP protocol establishes a connection between server and clients: Commands within a UDP package have sequence numbers and a flag if they are reliable. If so, the receiving end has to acknowledge the command. Reliable commands are repeated in short intervals until an acknowledgement arrives. If it does not arrive, the connection is timed out.

Both sides monitor this connection independently from their perspective. Both sides have their rules to decide if the other is still available.

If a timeout is detected, a disconnect happens on that side of the connection. As soon as one side thinks the other side does not respond anymore, no message is sent to it. This is why timeout disconnects are one sided and not synchronous.

The timeout disconnect is the most frequent issue, aside from problems to connect «at all».

There is no single point of failure when you run into frequent timeouts but there are a few common scenarios that cause issues and some ways to fix them.

Here is a quick checklist:

You can adjust the number and timing of resends. See «Tweak Resends».

If you are making a mobile app, read about Mobile Background Apps.

If you want to debug your game using breakpoints and all, read this.

Traffic Issues And Buffer Full

Photon servers and clients usually buffer some commands before they are actually put into a package and sent via the internet. This allows us to aggregate multiple commands into (fewer) packages.

If some side produces a lot of commands (e. g. by sending lots of big events), then the buffers might run out.

Filling buffers will also cause additional Lag: You will notice that events take longer to arrive on the other side. Operation responses are not as quick as usual.

First Aid

Check The Logs

This is the first check you need to do.

All clients have some callback to provide log messages about internal state changes and issues. You should log these messages and access them in case of problems.

You can usually increase the logging to some degree, if nothing useful shows up. Check the API reference how to do this.

If you customized the server, check the logs there.

Enable The SupportLogger

The SupportLogger is a tool that logs the most commonly needed info to debug problems with Photon, like the (abbreviated) AppId, version, region, server IPs and some callbacks.

For Unity, the SupportLogger is a MonoBehaviour. When not using PUN, you can add this component to any GameObject and set the LoadBalancingClient for it. Call DontDestroyOnLoad() for that GameObject.

Outside of Unity, the SupportLogger is a regular class. Instantiate it and set the LoadBalancingClient, to make it register for callbacks. The Debug. Log method(s) get mapped to System. Diagnostics. Debug respectively.

Try Another Project

All client SDKs for Photon include some demos. Use one of those on your target platform. If the demo fails too, an issue with the connection is more likely.

Try Another Server Or Region

Using the Photon Cloud, you can also use another region easily.

Hosting yourself? Prefer physical over virtual machines. Test minimum lag (round-trip time) with a client near the server (but not on the same machine or network). Think about adding servers close to your customers.

Try Another Connection

In some cases, specific hardware can make the connection fail. Try another WiFi, router, etc. Check if another device runs better.

Try Alternative Ports

Since early 2018, we support a new port-range in all Photon Cloud deployments: Instead of using 5055 to 5058, the ports start at 27000.

Changing the ports does not sound like it should make a difference but it can have a very positive effect. So far, the feedback was really positive.

In some client SDKs, you might have to replace the numbers in the address-strings which are coming from the server. The Name Server has port 27000 (was 5058), the Master Server 27001 (was 5055) and the Game Server becomes 27002 (was 5056). This can be done with simple string replacement.

Enable CRC Checks

Sometimes, packages get corrupted on the way between client and server. This is more likely when a router or network is especially busy. Some hardware or software is outright buggy corruption might happen anytime.

Photon has an optional CRC Check per package. As this takes some performance, we didn’t activate this by default.

You enable CRC Checks in the client but the server will also send a CRC when you do.

Photon clients track how many packages get dropped due to enabled CRC checks.

Fine Tuning

Check Traffic Stats

On some client platforms, you can enable Traffic Statistics directly in Photon. Those track various vital performance indicators and can be logged easily.

In C#, the Traffic Stats are available in the LoadBalancingPeer class as TrafficStatsGameLevel property. This provides an overview of the most interesting values.

As example, use TrafficStatsGameLevel. LongestDeltaBetweenDispatching to check the longest time between to consecutive DispatchIncomginCommands calls. If this time is more than a few milliseconds, you might have some local lag. Check LongestDeltaBetweenSending to make sure your client is frequently sending.

The TrafficStatsIncoming and TrafficStatsOutgoing properties provide more statistics for in — and outgoing bytes, commands and packages.

Tweak Resends

C#/.Net Photon library has two properties which allow you to tweak the resend timing:

PhotonPeer. QuickResendAttempts

The LoadBalancingPeer. QuickResendAttempts speed up repeats of reliable commands that did not get acknowledged by the receiving end. The result is a bit more traffic for a shorter delays if some message got dropped.

PhotonPeer. SentCountAllowance

By default, Photon clients send each reliable command up to 6 times. If there is no ACK for it after the 5th re-send, the connection is shut down.

The LoadBalancingPeer. SentCountAllowance defines how often the client will repeat an individual, reliable message. If the client repeats faster, it should also repeat more often.

In some cases, you see a good effect when setting QuickResendAttempts to 3 and SentCountAllowance to 7.

More repeats don’t guarantee a better connection though and definitely allow longer delays.

Check Resent Reliable Commands

If this value goes through the roof, the connection is unstable and UDP packets don’t get through properly (in either direction).

Send Less

You can usually send less to avoid traffic issues. Doing so has a lot of different approaches:

Don’t Send More Than What’s Needed

Exchange only what’s totally necessary. Send only relevant values and derive as much as you can from them. Optimize what you send based on the context. Try to think about what you send and how often. Non critical data should be either recomputed on the receiving side based on the data synchronized or with what’s happening in game instead of forced via synchronization.

In an RTS, you could send «orders» for a bunch of units when they happen. This is much leaner than sending position, rotation and velocity for each unit ten times a second. Good read: 1500 archers.

In a shooter, send a shot as position and direction. Bullets generally fly in a straight line, so you don’t have to send individual positions every 100 ms. You can clean up a bullet when it hits anything or after it travelled «so many» units.

Don’t send animations. Usually you can derive all animations from input and actions a player does. There is a good chance that a sent animation gets delayed and playing it too late usually looks awkward anyways.

Use delta compression. Send only values when they changes since last time they were sent. Use interpolation of data to smooth values on the receiving side. It’s preferable over brute force synchronization and will save traffic.

Don’t Send Too Much

Optimize exchanged types and data structures.

Use another service to download static or bigger data (e. g. maps). Photon is not built as content delivery system. It’s often cheaper and easier to maintain to use HTTP-based content systems. Anything that’s bigger than the Maximum Transfer Unit (MTU) will be fragmented and sent as multiple reliable packages (they have to arrive to assemble the full message again).

Don’t Send Too Often

Lower the send rate, you should go under 10 if possible. This depends on your gameplay of course. This has a major impact on traffic. You can also use adaptive or dynamic send rate based on the user’s activity or the exchanged data, this is also helping a lot.

Send unreliable when possible. You can use unreliable messages in most cases if you have to send another update as soon as possible. Unreliable messages never cause a repeat. Example: In an FPS, player position can usually be sent unreliable.

Try Lower MTU

With a setting on the client-side, you can force server and client to use an even smaller maximum package size than usual. Lowering the MTU means you need more packages to send some messages but if nothing else helped, it makes sense to try this.

The results of this are unverified and we would like to hear from you if this improved things.

Tools

Wireshark

This network protocol analyzer and logger is extremely useful to find out what is actually happening on the network layer of your game. With this tool, we can have a look at the facts (networking wise).

Wireshark can be a bit intimidating but there are only a few settings you have to do when we ask you to log our game’s traffic.

Install and start. The first toolbar icon will open the list of (network) interfaces.

PhotonServerSettings in InspectorWireshark Toolbar

You can check the box next to the interface which has traffic. In doubt, log more than one interface. Next, click «Options».

We don’t want all your network traffic, so you have to setup a filter per checked interface. In the next dialog («Capture Options»), find the checked interface and double click it. This opens another dialog «Interface Settings». Here you can setup a Filter.

A filter to log anything Photon related looks like so:

When you press «Start», the logging will begin when you connect. After you reproduced an issue, stop the logging (third toolbar button) and save it.

In best case, you also include a description of what you did, if the error happens regularly, how often and when it happened in this case (there are timestamps in the log). Attach a client console log, too.

Platform Specific Info

Unity

PUN implements the Service calls for you in intervals.

However, Unity won’t call Update while it’s loading scenes and assets or while you drag a standalone-player’s window.

Pausing the message queue has two effects:

If you use our Photon Unity SDK, you probably do the Service calls in some MonoBehaviour Update method.

To make sure Photon client’s SendOutgoingCommands is called while you load scenes, implement a background thread. This thread should pause 100 or 200 ms between each call, so it does not take away all performance.

Recover From Unexpected Disconnects

Disconnects will happen, they can be reduced but they can’t be avoided. So it’s better to implement a recovery routine for when those unexpected disconnects occur especially mid-game.

When To Reconnect

First you need to make sure that the disconnect cause can be recovered from. Some disconnects may be due to issues that cannot be resolved or bypassed by a simple reconnect. Instead those cases should be treated separately and handled case by case.

Quick Rejoin (ReconnectAndRejoin)

Photon client SDKs offer a way to rejoin rooms as soon as possible after being disconnected while joined to a room. This is called «Quick Rejoin». Photon client locally caches the authentication token, the room name and the game server address. So when disconnected mid-game, the client can do a shortcut: connect directly to the game server, authenticate using the saved token and rejoin the room.

You can catch these in the OnJoinRoomFailed callback.

Reconnect

If the client got disconnected outside of a room or if quick rejoin failed ( ReconnectAndRejoin returned false) you could still do a Reconnect only. The client will reconnect to the master server and reuse the cached authentication token there.

«connection to server timed out (code:wheel)»

Accepted Solution

It sounds like you may be having issues with your connection @Bakki87. I would suggest taking a look at our Connection troubleshooting steps which you can find here: https://help. ea. com/en-us/help/faq/connection-troubleshooting-basic/

It’ll take you a couple of minutes to do them all but please do take the time and do them all.

Let me know how you get on and if you want to share your UO Trace then I’m happy to take a look at how your data is being routed.

Re: «connection to server timed out (code:wheel)»

It sounds like you may be having issues with your connection @Bakki87. I would suggest taking a look at our Connection troubleshooting steps which you can find here: https://help. ea. com/en-us/help/faq/connection-troubleshooting-basic/

It’ll take you a couple of minutes to do them all but please do take the time and do them all.

Let me know how you get on and if you want to share your UO Trace then I’m happy to take a look at how your data is being routed.

Re: «connection to server timed out (code:wheel)»

I’m having the same issue and none of these trouble shooting suggestions are working

Re: «connection to server timed out (code:wheel)»

Can you share the UO Trace you ran when you did the troubleshooting steps @jacobcuh? This will allow us to take a look at your connection.

Re: «connection to server timed out (code:wheel)»

Re: «connection to server timed out (code:wheel)»

When an issue such as this appear we need to troubleshoot them @uJamBo. I’ve been playing Apex Legends on and off throughout the day and not see any issues. If you are seeing an issue then we would ask that you go through the troubleshooting steps I posted above and share your UO Trace with us. Generally, if there was an issue with the servers it would affect everyone and not just a few. As the number of reports is so low we need as much information as possible to investigate.

Re: «connection to server timed out (code:wheel)»

@EA_Darko wrote:

When an issue such as this appear we need to troubleshoot them @uJamBo. I’ve been playing Apex Legends on and off throughout the day and not see any issues. If you are seeing an issue then we would ask that you go through the troubleshooting steps I posted above and share your UO Trace with us. Generally, if there was an issue with the servers it would affect everyone and not just a few. As the number of reports is so low we need as much information as possible to investigate.

Darko

I get same error but it says ( code:leaf )

Re: «connection to server timed out (code:wheel)»

I have seen that error message before @Sp4ceb4lls. Users in this thread found a solution so if you have a little time can you go through the steps in the accepted solution to see if it helps: https://answers. ea. com/t5/Technical-Issues/Apex-error-code-leaf-PC/td-p/7882416

Re: «connection to server timed out (code:wheel)»

Hello @EA_Darko and community in case, I am a player of Apex and Streamer, I have followed the progress of this error in particular, and apologize for my English and the size of my description in this post, but I already contacted the support of the EA of Brazil and together with some specialists of the company itself, in which they made several tests with me and with the game, and they had no solution to this case of error code: wheel.

When you start the lobby of choice of legends in the game a red symbol appears in the upper right of the screen, as it is present in the print below.

And after the Legend selection lobby this red symbol disappears, and the game remains normal.

However in random periods during the game another red symbol appears, one resembling a red speedometer and another that looks like two lines with 3 points each. And when that appears the game freezes and I’m disconnected from the lobby.

OBS. I, along with the Brazilian EA Support Team and experts, tried almost everything for almost 2 hours on a link to solve the problem, within some options of connection problems, internet problems, problems with mouse softwares, keyboard and communion as the discord where everyone was disabled for testing and nothing was solved, we suspect it to be some problem in the update but I’m not sure of that! So I come humbly to ask for your help in this case.

Источники:

https://doc. photonengine. com/en-us/realtime/current/troubleshooting/analyzing-disconnects

https://answers. ea. com/t5/Technical-Issues/quot-connection-to-server-timed-out-code-wheel-quot/td-p/7919667

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: