jetty.project/jetty-websocket/websocket-common/websocket-states.txt

108 lines
3.1 KiB
Plaintext

Documenting the States of a WebSocket Session.
NEW: (Internal)
A new WebSocket session.
It has had no connection attempted yet.
CONNECTING: (RFC6455) // synonyms: HANDSHAKING
The connection is being attempted, along with the Upgrade handshake.
CONNECTED: (Internal) // synonyms: HANDSHAKED, HANDSHAKEN, OPENING
The connection is established.
The User WebSocket Endpoint has not been notified yet.
OPEN: (RFC6455) // synonyms: OPENED
User WebSocket Endpoint is now Opened (the onOpen method has been called, no close by onOpen)
CLOSING: (RFC6455)
The close handshake has begun.
Either the local initiated the close, waiting for the remote to reply.
Or the remote initiated the close, and the local hasn't replied yet.
This can be considered a logical half-closed state.
+ (sub state) CLOSE_FRAME_SENT (bool)
CLOSED: (RFC6455)
The connection and session is closed.
This means either the close handshake completed, or the connection was
disconnected for other reasons.
----
Normal Client Initiated Close State Transition
Client: State: NEW
Client: WSEndpoint created
Client: WSSession created
Http GET w/Upgrade initiated
Client: State: CONNECTING
Upgrade Handshake negotiated (HTTP 101 response)
Client: State: CONNECTED
Client: WSEndpoint.onOpen() called
Client: State: OPEN
Client: WSEndpoint.onMessage() - received msg
Client: WSSession.close(local close details)
Client: State: CLOSING
Client: Send CLOSE Frame to remote
Remote: Received CLOSE Frame from client
Remote: Sends CLOSE Frame reply (remote close details)
Client: WSEndpoint.onClose(remote close details)
Client: State: CLOSED
Client: TCP Connection disconnect completely
----
Normal Remote Initiated Close State Transition
Client: State: NEW
Client: WSEndpoint created
Client: WSSession created
Http GET w/Upgrade initiated
Client: State: CONNECTING
Upgrade Handshake negotiated (HTTP 101 response)
Client: State: CONNECTED
Client: WSEndpoint.onOpen() called
Client: State: OPEN
Client: WSEndpoint.onMessage() - received msg
Remote: Sends CLOSE Frame (remote close details)
Client: Received CLOSE Frame from remote
Client: State: CLOSING
Client: WSEndpoint.onClose(remote close details)
Client: after onClose()
if can transition to CLOSED
Client: Sends CLOSE Frame
Client: TCP Connection disconnect completely
---
Overlapping Close State (Remote first) Transition
Client: WSEndpoint created
Client: WSSession created
Http GET w/Upgrade initiated
Client: State: CONNECTING
Upgrade Handshake negotiated (HTTP 101 response)
Client: State: CONNECTED
Client: WSEndpoint.onOpen() called
Client: State: OPEN
Client: WSEndpoint.onMessage() - received msg
Remote[t1]: Sends CLOSE Frame (remote close details)
Client[t2]: WSSession.close(local close details)
Client[t2]: State: CLOSING
Client[t1]: Received CLOSE Frame from remote
Client[t1]: Cannot transition to State: CLOSING (no-op)
Client[t1]: WSEndpoint.onClose(remote close details)
Client[t1]: after onClose()
if can transition to CLOSED
Client: Sends CLOSE Frame
Client: TCP Connection disconnect completely