Жизненный цикл и состояния соединения
Изучите различные состояния соединения WebSocket — от открытия до закрытия — и способы управления ими.
«Жизненный цикл и состояния соединения» — бесплатный урок WebSockets & Realtime Systems Programming на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения WebSockets & Realtime Systems Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс WebSockets & Realtime Systems Programming содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Understanding Connection States
When you work with WebSockets, it's crucial to know the current state of your connection. This helps you manage data flow and handle disconnections gracefully.
Just like a phone call goes through phases (dialing, connected, hanging up), a WebSocket connection has a defined lifecycle with specific states.
The CONNECTING State (0)
The very first state of a WebSocket is CONNECTING. This happens immediately after you create a new WebSocket object.
- Its numeric value is
0. - In this state, the client is trying to establish a connection with the server.
- This includes the initial HTTP handshake process that upgrades the connection to WebSocket.
- You cannot send messages yet.
Connecting with Node.js
When a WebSocket client attempts to connect, it enters the CONNECTING state (readyState = 0). This is where the initial handshake occurs.
To run this Node.js example:
- Make sure you have Node.js installed.
- Open your terminal and run
npm init -y - Install the
wslibrary:npm install ws - Save the code below as
index.js. - Run
node index.js.
Note: You'll need a WebSocket server running on ws://localhost:8080 for a successful connection.
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
console.log(`Initial state: ${ws.readyState}`); // Expected: 0 (CONNECTING)
ws.onopen = () => {
console.log(`Connection opened! State: ${ws.readyState}`); // Expected: 1 (OPEN)
ws.send('Hello from CoddyKit client!');
setTimeout(() => ws.close(1000, 'Demo complete'), 2000);
};
ws.onmessage = (event) => {
console.log(`Received: ${event.data}`);
};
ws.onclose = (event) => {
console.log(`Connection closed. Code: ${event.code}, Reason: ${event.reason}`);
console.log(`Final state: ${ws.readyState}`); // Expected: 3 (CLOSED)
};
ws.onerror = (error) => {
console.error('WebSocket Error:', error.message);
};The OPEN State (1)
Once the handshake is complete and the connection is successfully established, the WebSocket enters the OPEN state.
- Its numeric value is
1. - In this state, the connection is ready for bidirectional communication.
- You can send data to the server, and the server can send data to you.
- This is the active communication phase.
Handling the OPEN Event
The onopen event is fired once the WebSocket connection transitions from CONNECTING to OPEN. This is your cue that you can start sending messages.
Run this Node.js example to see the onopen event in action:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('WebSocket connection is now OPEN!');
console.log(`Current state: ${ws.readyState}`); // Expected: 1 (OPEN)
ws.send('Ready to chat!');
setTimeout(() => ws.close(), 1500); // Close after a short delay
};
ws.onmessage = (event) => {
console.log('Received:', event.data);
};
ws.onclose = () => {
console.log('Connection closed.');
};
ws.onerror = (error) => {
console.error('Error:', error.message);
};The CLOSING State (2)
When either the client or the server decides to terminate the connection, it enters the CLOSING state.
- Its numeric value is
2. - This state occurs after
ws.close()is called, but before the connection is fully shut down. - During this phase, a closing handshake is performed to ensure a clean termination.
- No new messages should be sent, though some buffered messages might still be processed.
Gracefully Closing a Connection
You can explicitly close a WebSocket connection using the ws.close() method. This will transition the connection through the CLOSING state (readyState = 2) before finally becoming CLOSED (readyState = 3).
Observe the state changes when closing:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log(`Connection OPEN. State: ${ws.readyState}`); // 1
console.log('Initiating connection close...');
ws.close(1000, 'Client requested shutdown'); // Code 1000: normal closure
console.log(`State after calling close(): ${ws.readyState}`); // Expected: 2 (CLOSING)
};
ws.onclose = (event) => {
console.log(`Connection CLOSED. State: ${ws.readyState}`); // 3
console.log(`Close Code: ${event.code}, Reason: ${event.reason}`);
};
ws.onerror = (error) => {
console.error('Error during connection:', error.message);
};The CLOSED State (3)
The final state for a WebSocket connection is CLOSED.
- Its numeric value is
3. - The connection has been completely terminated.
- No further communication can occur on this particular WebSocket object.
- If you need to reconnect, you must create a new
WebSocketinstance.
Checking Connection Status
You can always check the current state of a WebSocket connection using its readyState property. This property returns one of the numeric values (0, 1, 2, 3) or their corresponding named constants:
WebSocket.CONNECTING(0)WebSocket.OPEN(1)WebSocket.CLOSING(2)WebSocket.CLOSED(3)
Using these constants makes your code more readable!
Quick Check: Connection States
The readyState property indicates the current status of a WebSocket connection.
Recap: WebSocket Lifecycle
Great job! You've learned about the four essential states of a WebSocket connection:
CONNECTING(0): Handshake in progress.OPEN(1): Connection established, ready for data.CLOSING(2): Close handshake initiated.CLOSED(3): Connection terminated.
Understanding these states is fundamental for building robust and reliable realtime applications.
Изучай WebSockets & Realtime Systems Programming с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 12
- Уроки
- 47
Часто задаваемые вопросы
Урок «Жизненный цикл и состояния соединения» бесплатный?
Да — полный текст урока «Жизненный цикл и состояния соединения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс WebSockets & Realtime Systems Programming, подпишись на CoddyKit PRO. Курс WebSockets & Realtime Systems Programming содержит 4 уроков всего.
Чему я научусь в уроке «Жизненный цикл и состояния соединения»?
Изучите различные состояния соединения WebSocket — от открытия до закрытия — и способы управления ими. Ты практикуешь WebSockets & Realtime Systems Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать WebSockets & Realtime Systems Programming?
Предыдущий опыт не требуется. WebSockets & Realtime Systems Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Жизненный цикл и состояния соединения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке WebSockets & Realtime Systems Programming?
Да. Каждый урок WebSockets & Realtime Systems Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Принцип рукопожатия WebSocket
- Фрейминг данных и сообщения WebSocket
- Жизненный цикл и состояния соединения
- Подпротоколы, расширения и сжатие