С непрерывным развитием интернет-технологий требования к интерактивности и работе в режиме реального времени веб-приложений становятся все выше и выше, а метод передачи по протоколу HTTP не может удовлетворить этим требованиям. Поэтому протокол WebSocket появился как того требует время. Это полнодуплексный протокол связи, основанный на протоколе TCP, который может устанавливать постоянное соединение между клиентом и сервером для обеспечения связи в реальном времени.
В JavaScript реализация связи WebSocket может осуществляться через API WebSocket. В этой статье будут подробно представлены принципы реализации, методы использования и распространенные сценарии применения связи WebSocket.
Принцип реализации связи WebSocket основан на протоколе HTTP и протоколе TCP. Когда клиент инициирует запрос на подключение WebSocket к серверу, он сначала устанавливает соединение по протоколу HTTP, а затем обновляется до протокола WebSocket, чтобы установить TCP-соединение для обеспечения связи между двумя сторонами в реальном времени.
Прежде чем установить соединение WebSocket, клиенту необходимо отправить HTTP-запрос на сервер. Заголовок запроса содержит информацию о WebSocket, как показано ниже:
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Среди них поля «Обновление» и «Соединение» представляют собой обновление HTTP-соединения до соединения WebSocket; Sec-WebSocket-Key — это случайная строка, используемая для вычисления поля Sec-WebSocket-Accept в ответе на подтверждение связи; Sec-WebSocket-Protocol является необязательным; поле, используемое для указания подпротокола Sec-WebSocket-Version, указывает номер версии WebSocket.
После того, как сервер получит этот запрос, он выполнит ряд процессов и вернет ответ на рукопожатие, как показано ниже:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Среди них код состояния HTTP 101 указывает, что обновление прошло успешно; поля «Обновление» и «Соединение» также указывают на обновление до соединения WebSocket; поле Sec-WebSocket-Accept генерируется путем расчета Sec-WebSocket-Key и используется для проверьте, является ли запрос клиента законным; Sec-WebSocket -Protocol указывает подпротокол.
После успешного установления связи между клиентом и сервером устанавливается соединение WebSocket, обеспечивающее двустороннюю связь.
В JavaScript реализация связи WebSocket с использованием API WebSocket очень проста. Сначала вам нужно создать объект WebSocket и указать адрес и протокол сервера:
const socket = new WebSocket('ws://example.com:8080', 'chat');
Среди них первый параметр — это адрес сервера, а второй параметр — подпротокол. Второй параметр можно опустить, если не указан подпротокол.
После создания объекта WebSocket вы можете общаться через его свойства и методы:
Вот простой пример связи через WebSocket:
const socket = new WebSocket('ws://example.com:8080', 'chat');
socket.onopen = () => {
console.log('Соединение WebSocket установлено');
socket.send('Hello, WebSocket!');
};
socket.onmessage = (event) => {
console.log(`Полученные данные, отправленные сервером: ${event.data}`);
};
socket.onerror = (error) => {
console.error(`Ошибка подключения WebSocket: ${error}`);
};
socket.onclose = () => {
console.log('Соединение WebSocket закрыто');
};
Связь через WebSocket может применяться во многих сценариях, таких как:
Связь через WebSocket — это полнодуплексный протокол связи, основанный на протоколе TCP, который может устанавливать постоянное соединение между клиентом и сервером для обеспечения связи в реальном времени. В JavaScript связь WebSocket может быть реализована через API WebSocket, что очень просто и удобно. Связь через WebSocket может применяться во многих сценариях, таких как чат в реальном времени, отображение данных в реальном времени, взаимодействие в игре, удаленное управление и т. д.