Unity-Technologies / Unity-Technologies/multiplayer-community-contributions

Occasional error on disconnect (websockets)

Open
#201 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
555
Forks
197
Avg merge
4d 12h
Merged PRs (30d)
1

Description

Sometimes when the browser tab is closed a few error messages will be thrown on the server and then a repeating error message which hangs the server completely. Generally clients can disconnect perfectly fine but ~1/20 times this happens.

image

InvalidOperationException: The current state of the connection is not Open.
WebSocketSharp.WebSocket.Send (System.Byte[] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/Libraries/websocket-sharp/websocket-sharp/WebSocket.cs:3370)
Netcode.Transports.WebSocket.WebSocketPeer.Send (System.Byte[] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketPeer.cs:25)
Netcode.Transports.WebSocket.WebSocketServerConnectionBehavior.Send (System.UInt64 clientId, System.ArraySegment`1[T] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketServerConnectionBehavior.cs:75)
Netcode.Transports.WebSocket.WebSocketTransport.Send (System.UInt64 clientId, System.ArraySegment`1[T] data, Unity.Netcode.NetworkDelivery delivery) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketTransport.cs:91)
Unity.Netcode.NetworkManager+NetworkManagerMessageSender.Send (System.UInt64 clientId, Unity.Netcode.NetworkDelivery delivery, Unity.Netcode.FastBufferWriter batchData) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:179)
Unity.Netcode.MessagingSystem.ProcessSendQueues () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:768)
Unity.Netcode.NetworkManager.OnNetworkPostLateUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1641)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1538)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkPostLateUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:268)
NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.FastBufferWriter.Dispose () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Serialization/FastBufferWriter.cs:121)
Unity.Netcode.MessagingSystem.CleanupDisconnectedClient (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:438)
Unity.Netcode.MessagingSystem.ClientDisconnected (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:429)
Unity.Netcode.NetworkManager.OnClientDisconnectFromServer (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:2159)
Unity.Netcode.NetworkManager.HandleRawTransportPoll (Unity.Netcode.NetworkEvent networkEvent, System.UInt64 clientId, System.ArraySegment`1[T] payload, System.Single receiveTime) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1875)
Unity.Netcode.NetworkManager.OnNetworkEarlyUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1596)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1532)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkEarlyUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:208)

This is the error message that loops and hangs the server:

NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.MessagingSystem.ProcessSendQueues () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:756)
Unity.Netcode.NetworkManager.OnNetworkPostLateUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1641)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1538)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkPostLateUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:268)

Unity 2022.2.0b16
Netcode for GameObjects 1.2.0

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the browser-tab disconnect using the WebSocket transport, then inspect WebSocketPeer.cs, WebSocketServerConnectionBehavior.cs, WebSocketTransport.cs, and the MessagingSystem stack-trace locations. Done means the intermittent disconnect no longer produces repeated errors or hangs the server, while normal client disconnects continue to work.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, unity
Domain
game-dev, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.