There are three type packet will client and server send to each other:
- handshake - start establish connection
- request - client send request to server
- response - server send response to client
- push - server push real-time data to client
Handshake
Flow:
sequenceDiagram
client ->> server: 1. handshake
server ->> server: 1.1 check handshake
alt handshake invalid
server --x client: 2. disconnect
else is valid
server -->> client: 2. build connection
endAfter client sending handshake packet server, the connection has been established. If handshake packet is invalid, server will push a close data to client. If access by TCP, client can send handshake packet and first data packet(auth) for accelerating communication.
Request and Response
Request <--> Response: Client send a request packet, server will send back a response packet.
Flow:
sequenceDiagram
autonumber
par request 1
client -->> server: request, req_id: 1
server -->> client: response, req_id: 1
end
par request 100
client -->> server: request, req_id: 100
server -->> client: response: req_id: 100
end
par request n
client -->> server: request, req_id: n
server -->> client: response, req_id: n
endAfter client and server sucess handshaking, peers can use Request <--> Response to communicate. Request and Response are paired by request_id.
Client and Server can send heartbeat request to each other.
Push
Push is one peer send data to another peer, and no need response.
sequenceDiagram
server -->> client: push, data 1
server -->> client: push, data 2Right now, we only support server push data to client.