WebSocket API¶
Information about WebSocket API and how to open connection.
Introduction¶
WebSocket
is the alternate transport to getting data from the server. The process of notification about events occurs from the server to the client through a constantly open connection. This allows you to display changes in real time.
Currently, the Atmosphere Framework used as an application layer library and protocol.
Standard workflow¶
Let's describe a standard workflow for WebSocket API:
- Determine API base URL.
- Get the hash of an API Key.
- Open WebSocket connection by the path /event/subscription/ with
Atmosphere
protocol parameters. - Subscribe on events using subscribe action.
- Listen and process the incoming events.
- Get the current tracker states after subscribe on a
state
event. - Subscribe and unsubscribe on the events if needed.
- Unsubscribe when leaving monitoring page using unsubscribe action.
Note
- The subscription requests must contain the
hash
of an API Key. - Responses and errors for subscribe and unsubscribe actions are similar with common API format.
- All
WebSocket
frames use aJSON
format. Exceptions are heartbeat frames containing "X".
Open connection¶
In a simplified form, opening the WebSocket using atmosphere-javascript looks like this:
var subSocket;
function sendSubsrcibeRequest() {
console.log('sending subsrcibe action to websocket');
subSocket.push(JSON.stringify({
action: 'subscribe',
hash: 'e4c24xxx4a08e9xxxc337xxxx5ca04e1',
requests: [
{
type: 'state_batch',
target: {
type: 'all'
}
}
]
}));
}
var request = {
url: 'https://api.navixy.com/v2/event/subscription',
contentType : "application/json",
logLevel : 'debug',
transport : 'websocket',
trackMessageLength : false,
reconnectInterval: 2000,
onOpen: function(r) {
console.log('onOpen', r);
sendSubsrcibeRequest();
},
onReopen: function(r) {
console.log('onReopen', r);
sendSubsrcibeRequest();
},
onMessage: function (msg) {
console.log('onMessage', msg);
},
onClientTimeout: function(r) {
console.log('onClientTimeout', r);
},
onTransportFailure: function(errorMsg, request) {
console.log('onTransportFailure', errorMsg);
},
onClose: function(r) {
console.log('onClose', r);
},
onError: function(r) {
console.log('onError', r);
},
onReconnect: function(request, response) {
console.log('onReconnect', response);
}
};
subSocket = atmosphere.subscribe(request);
Executing this code will lead to send a request
wss://domain.com/event/subscription?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.3.6-javascript&X-Atmosphere-Transport=websocket&Content-Type=application/json&X-atmo-protocol=true
and upgrade the connection to the WebSocket. After that, will be sent a first frame through the opened WebSocket channel:
b623a15d-9623-4fd8-a9d3-697036635c29|30000|X|
This is service message for the Atmosphere protocol negotiation. Now everything is ready to subscribe on events.
Common fields¶
All messages from client side contain field action
with action name (e.g. "subscribe" or "unsubscribe").
All messages from server side contain field type
with message type ("event", "response" or "error") and data
with a payload.