Junior
Describe several ways to connect a server and a client.
sobes.tech AI
Answer from AI
There are several main ways of communication between the client (browser) and the server.
-
HTTP/HTTPS (Polling/Short Polling):
- The client sends a request to the server and waits for a response.
- The server processes the request and sends a response.
- In Short Polling, the client periodically sends requests to check for updates.
- Simple to implement but inefficient for frequent updates due to overhead on each request.
// Example of primitive Short Polling function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Process received data }) .finally(() => { setTimeout(checkUpdates, 5000); // Repeat every 5 seconds }); } checkUpdates(); -
Long Polling:
- The client sends a request to the server, which keeps the connection open until new data appears or a timeout occurs.
- When data appears, the server immediately sends a response, after which the client sends a new request.
- More efficient than Short Polling but still has a delay between receiving data and sending the next request.
-
WebSockets:
- Create a persistent, bidirectional connection between the client and server.
- After establishing the connection, both sides can send and receive data at any time without additional HTTP requests.
- Ideal for real-time applications (chats, online games, notifications).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Connection established'); socket.send('Hello server!'); }; socket.onmessage = function(event) { console.log('Message received from server:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Connection closed cleanly, code=${event.code}, reason=${event.reason}`); } else { console.error('Connection interrupted'); } }; socket.onerror = function(error) { console.error('WebSocket error:', error); }; -
Server-Sent Events (SSE):
- Allow the server to send data to the client unidirectionally over an HTTP connection.
- The client subscribes to a stream of events from the server.
- Suitable for cases where the server sends updates to the client, but the client does not send data back (e.g., news stream, task progress display).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Event received from server:', event.data); }; eventSource.onerror = function(error) { console.error('SSE error:', error); eventSource.close(); // Close connection on error };
Each method has its advantages and disadvantages, and the choice depends on the specific application requirements for update frequency, data volume, and the need for bidirectional communication.