Connection randomly closes for some

Hey, so some players are experience kicks when playing our game.

Ive now spent hours trying to figure out why.

The main issues seems to come from timeouts:

{"level":"debug","ts":"2025-11-04T02:33:50.075Z","caller":"server/session_ws.go:207","msg":"Error reading message from client","uid":"b085b727-27a6-4f6a-a1b2-7c3e0b540aa8","sid":"db2943b8-b91e-11f0-b49f-006100a0eb06","error":"read tcp 172.18.0.3:7350->172.18.0.4:48226: i/o timeout"}

Table of reasons from server:
| i/o timeout              | 9     | 47%     |
| close 1006 (abnormal)    | 5     | 26%     |
| close sent (debug)       | 5     | 26%     |
| use of closed connection | 1     | 5%      |


Client code debug looks like so:

=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3806: { “cid”: “3806”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3807: { “cid”: “3807”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3808: { “cid”: “3808”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3809: { “cid”: “3809”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3810: { “cid”: “3810”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3811: { “cid”: “3811”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Resuming request: 3812: { “cid”: “3812”, “rpc”: { “id”: “rpc_ping” } }
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : DEBUG === Sending async request: http_key: , id: rpc_ping, payload: ,
=== Nakama : WARNING === WebSocket closed. Code: -1, Reason:
=== Nakama : DEBUG === Cancelling request: 3813
=== Nakama : DEBUG === Resuming request: 3813: NakamaException(StatusCode={-1}, Message=‘{Request cancelled.}’, GrpcStatusCode={-1})
=== Nakama : DEBUG === Cancelling request: 3814
=== Nakama : DEBUG === Resuming request: 3814: NakamaException(StatusCode={-1}, Message=‘{Request cancelled.}’, GrpcStatusCode={-1})
=== Nakama : DEBUG === Cancelling request: 3815
=== Nakama : DEBUG === Resuming request: 3815: NakamaException(StatusCode={-1}, Message=‘{Request cancelled.}’, GrpcStatusCode={-1})


I cannot for the love of god understand what is going on.

session:
    token_expiry_sec: 999999999999
    refresh_token_expiry_sec: 999999999999

socket:
    
    port: 7350
    max_message_size_bytes: 4194304 # bytes
    write_wait_ms: 9000
    pong_wait_ms: 35000
    ping_period_ms: 5000 # Must be less than pong_wait_ms
    outgoing_queue_size: 64
    max_request_size_bytes: 999999999
    read_timeout_ms: 20000

I would be very happy if someone could have a look and maybe help me with this issue.

Best regards,

/G