HTML - WebSockets: руковод BEGINNERS

Привет, будущие веб-разработчики! Сегодня мы окунемся в захватывающий мир WebSockets. Не волнуйтесь, если вы никогда о них не слышали раньше - к концу этого учебника вы станете магом WebSocket! Так что возьмите свой любимый напиток, устройтесь поудобнее и начнем наше путешествие.

HTML - WebSocket

Что такое WebSockets?

Прежде чем углубиться в Details, давайте поймем, что такое WebSockets и почему они такие классные. Представьте, что вы разговариваете с другом. В обычном телефонном звонке вам нужно набрать номер, подождать, пока он ответит, сказать, что вы хотите, и затем положить трубку. Если вы хотите снова поговорить, вы повторяете весь процесс. Звучит утомительно, не так ли?

Вот как работает традиционное веб-общение. Ваш браузер отправляет запрос, ждет ответа и затем закрывает соединение. WebSockets, с другой стороны, как если бы у вас был открытый телефонный номер, где вы и ваш друг можете разговаривать whenever вы хотите, не constantly набирать и класть трубку. Круто, правда?

Синтаксис

Теперь давайте посмотрим, как мы на самом деле используем WebSockets в нашем HTML. Синтаксис неожиданно прост:

<script>
var socket = new WebSocket('ws://example.com/socket');
</script>

Здесь мы создаем новый объект WebSocket и подключаемся к серверу по адресу 'ws://example.com/socket'. Часть 'ws://' как 'http://' но специально для WebSockets. Есть также защищенная версия, 'wss://', как 'https://'.

Атрибуты WebSocket

WebSockets имеют некоторые удобные атрибуты, которые告诉我们 о текущем состоянии нашего соединения. Давайте посмотрим на них в таблице:

Атрибут Описание
readyState Текущее состояние соединения
bufferedAmount Количество байтов данных,queued с использованием метода send()
extensions Выбранные сервером расширения
protocol Имя подпротокола, выбранного сервером

Атрибут readyState особенно полезен. Он может принимать четыре значения:

  1. 0 (CONNECTING): Соединение еще не открыто.
  2. 1 (OPEN): Соединение открыто и готово к общению.
  3. 2 (CLOSING): Соединение находится в процессе закрытия.
  4. 3 (CLOSED): Соединение закрыто или не может быть открыто.

События WebSocket

WebSockets не только отправляют данные - они также могут реагировать на различные события. Это как если бы вы устанавливали гирлянды, которые взрываются, когда происходит что-то конкретное! Вот основные события:

  1. onopen: Вызывается, когда соединение установлено.
  2. onmessage: Вызывается, когда данные получены с сервера.
  3. onerror: Вызывается, когда occurs ошибка.
  4. onclose: Вызывается, когда соединение закрыто.

Давайте посмотрим, как мы используем их в коде:

<script>
var socket = new WebSocket('ws://example.com/socket');

socket.onopen = function(event) {
console.log('Соединение установлено!');
};

socket.onmessage = function(event) {
console.log('Сообщение с сервера:', event.data);
};

socket.onerror = function(error) {
console.log('Ошибка WebSocket:', error);
};

socket.onclose = function(event) {
console.log('Соединение закрыто.');
};
</script>

В этом примере мы настраиваем функции для обработки каждого из этих событий. Когда соединение открывается, мы логируем сообщение. Когда мы получаем сообщение, мы логируем его. Если occurs ошибка, мы логируем и это. И когда соединение закрывается, мы прощаемся!

Методы WebSocket

Теперь, когда мы знаем, как слушать события, давайте посмотрим, как мы можем на самом деле что-то делать с нашим WebSocket. Вот основные методы:

Метод Описание
send() Отправляет данные на сервер
close() Закрывает соединение WebSocket

Вот как мы используем эти методы:

<script>
var socket = new WebSocket('ws://example.com/socket');

// Отправка сообщения на сервер
socket.send('Привет, сервер!');

// Закрытие соединения
socket.close();
</script>

Это так просто! С помощью send(), мы можем отправить любые данные, которые хотим, на сервер. И когда мы закончили, мы вежливо закрываем соединение с помощью close().

Настройка WebSocket сервера на Python

Теперь я знаю, что мы сосредоточены на HTML здесь, но я думаю, что важно понять обе стороны разговора. Так что давайтеquicklook на то, как мы можем настроить простой сервер WebSocket с использованием Python. Не волнуйтесь, если вы не знакомы с Python - концепция важна здесь.

import asyncio
import websockets

async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Эхо: {message}")

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Этот сервер просто эхо любое сообщение, которое он получает, с префиксом "Эхо: ". Он работает на localhost (вашем компьютере) на порту 8765.

Настройка HTML клиента для сервера

Теперь у нас есть наш сервер, давайте создадим HTML-страницу, которая будет подключаться к нему:

<!DOCTYPE html>
<html>
<head>
<title>Тест WebSocket</title>
</head>
<body>
<h1>Тест WebSocket</h1>
<input type="text" id="messageInput" placeholder="Введите сообщение">
<button onclick="sendMessage()">Отправить</button>
<div id="messages"></div>

<script>
var socket = new WebSocket('ws://localhost:8765');

socket.onopen = function(event) {
console.log('Соединение установлено!');
};

socket.onmessage = function(event) {
var messages = document.getElementById('messages');
messages.innerHTML += '<p>' + event.data + '</p>';
};

function sendMessage() {
var input = document.getElementById('messageInput');
socket.send(input.value);
input.value = '';
}
</script>
</body>
</html>

Эта HTML-страница создает простой интерфейс, где вы можете ввести сообщение, отправить его на сервер и увидеть эхо-ответ.

И вот и все! Мы рассмотрели основы WebSockets, от понимания, что они такое, до настройки сервера и создания клиента. Помните, WebSockets - это все о реальном времени, двустороннем общении. Они идеальны для приложений, таких как чаты, live sport обновления или любые ситуации, где вам нужно мгновенноеexchange данных.

Пока вы продолжаете свое путешествие в веб-разработке, вы найдете, что WebSockets открывают全新的 мир возможностей. Так что продолжайте практиковаться, продолжайте экспериментировать и, самое главное, продолжайте наслаждаться! Счастливого кодирования!

Credits: Image by storyset