Description
Reverb Version
1.0.0-beta14
Laravel Version
10.10
PHP Version
8.1
Description
If I am understanding the Pusher protocol correctly, then if the WebSocket implementation supports native ping/pong messages, then Pusher will use those, and the pusher:ping
and pusher:pong
messages are only used if the client doesn't support websocket protocol ping messages.
Link to Pusher docs here
It seems like Laravel Reverb is ONLY sending pusher:ping
and not using the websocket native ping messages to determine if a connection is still alive. I found this to be a compatibility issue with the official dotnet Pusher client. If I understand the situation correctly, because the C# implementation of the websocket client handles ping messages at the ws protocol level, they didn't implement any handlers for pusher:ping
messages, which makes this client incompatible with Reverb.
If my assumptions are correct then this means Reverb should detect the client version and use a different pinging strategy based on the version? Or in my case could I just disable the reverb ping messages entirely and rely on the websocket pings being handled internally to keep the connection alive?
Edit: This excerpt from the Pusher docs linked above seems to imply that the C# client's behaviour is fine:
If the WebSocket draft supports protocol level ping-pong, then on receipt of a ping message, the client MUST respond with a pong message.
If the client does not support protocol level pings and advertises (on connect) that it implements a protocol version >= 5 then the client MUST respond to a pusher:ping event with a pusher.pong event.
It doesn't explicitly state that clients that already support protocol level pings must ALSO respond to pusher:ping events.
Steps To Reproduce
Set up a minimal Reverb server and minimal Pusher dotnet client (https://github.com/pusher/pusher-websocket-dotnet), wait 1 minute after connection, server drops client connection due to missed ping and client reconnects.