Статьи

Начните использовать HTML5 WebSockets сегодня

Одна из самых крутых новых возможностей HTML5 — это WebSockets, которые позволяют нам общаться с сервером без использования запросов AJAX. В этом руководстве мы рассмотрим процесс запуска сервера WebSocket на PHP, а затем создадим клиент для отправки и получения на него сообщений по протоколу WebSocket.


WebSockets — это метод двусторонней связи через один (TCP) сокет, тип технологии PUSH. На данный момент он все еще стандартизирован W3C; Тем не менее, последние версии Chrome и Safari поддерживают WebSockets.


Веб-розетки могут заменить длинные опросы. Это интересная концепция; клиент отправляет запрос на сервер — теперь, вместо того, чтобы сервер, отвечающий данными, которых он может не иметь, он по существу сохраняет соединение открытым до тех пор, пока свежие, актуальные данные не будут готовы к отправке — клиент затем получит это и отправляет еще один запрос. Это имеет свои преимущества: одним из них является уменьшенная задержка, поскольку уже открытое соединение не требует установления нового соединения. Однако длительный опрос на самом деле не является частью причудливой технологии: для запроса также возможен тайм-аут, и, таким образом, в любом случае потребуется новое соединение.

Многие Ajax-приложения используют вышеперечисленное — это часто можно объяснить плохим использованием ресурсов.

Не было бы замечательно, если бы сервер мог проснуться однажды утром и отправить свои данные клиентам, которые готовы слушать без какого-либо заранее установленного соединения? Добро пожаловать в мир технологии PUSH!


В этом руководстве основное внимание будет уделено построению клиента, а не реализации сервера.

Я использую XAMPP в Windows 7 для локального запуска PHP-сервера. Возьмите копию phpwebsockets, которая является сервером WebSocket на PHP. (Примечание: у меня возникли некоторые проблемы с этой версией, я внес в нее некоторые изменения и включу ее в исходные файлы). Существуют различные реализации WebSocket; если один из них не работает, вы можете попробовать другой или просто продолжить учебник.


Измените сервер в соответствии с вашими настройками, например, в setup.class.php:

1
2
3
4
public function __construct($host=’localhost’,$port=8000,$max=100)
{
    $this->createSocket($host,$port);
}

Просмотрите файлы и внесите необходимые изменения.


Позволяет получить основной шаблон; это мой файл client.php:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
<head>
<script src=»http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js»></script>
 
<title>WebSockets Client</title>
 
</head>
<body>
<div id=»wrapper»>
 
    <div id=»container»>
 
        <h1>WebSockets Client</h1>
 
        <div id=»chatLog»>
 
        </div><!— #chatLog —>
        <p id=»examples»>eg try ‘hi’, ‘name’, ‘age’, ‘today'</p>
 
        <input id=»text» type=»text» />
        <button id=»disconnect»>Disconnect</button>
 
    </div><!— #container —>
 
</div>
</body>
</html>​

Итак, в этом коде мы создаем простой шаблон: у нас есть поле для журнала чата, поле ввода и одна кнопка отключения.


Ничего особенного, просто разметьте некоторые элементы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
body {
    font-family:Arial, Helvetica, sans-serif;
}
#container{
    border:5px solid grey;
    width:800px;
    margin:0 auto;
    padding:10px;
}
#chatLog{
    padding:5px;
    border:1px solid black;
}
#chatLog p {
    margin:0;
}
.event {
    color:#999;
}
.warning{
    font-weight:bold;
    color:#CCC;
}

Во-первых, давайте попробуем понять идею событий WebSocket.

Мы будем использовать три события:

  • onopen: когда сокет открылся
  • onmessage: когда сообщение получено
  • onclose: когда розетка закрыта

Но как мы можем это реализовать?

Сначала создайте объект WebSocket

И проверка на события так же просто, как:

Но как насчет того, когда мы получим сообщение?

Тем не менее, давайте избегать использования блоков предупреждений и фактически интегрировать то, что мы узнали, в страницу клиента.


Итак, начнем. Сначала мы помещаем наш код в функцию готовности документа jQuery, затем проверяем, есть ли у пользователя браузер с поддержкой WebSockets. Если они этого не делают, мы добавляем ссылку на Chrome в HTML.

Как видите, если у пользователя есть WebSockets, тогда мы вызываем функцию connect (). Это ядро ​​функциональности: мы начнем с событий открытия, закрытия и получения.

Мы определим URL нашего сервера

Подождите, где http в этом URL? Ах да, это URL-адрес WebSocket, поэтому он использует другой протокол. Вот разбивка частей нашего URL:

Давайте продолжим с нашей функцией connect (). Мы поместим наш код в блок try / catch; поэтому, если что-то пойдет не так, мы можем сообщить об этом пользователю. Мы создаем новый WebSocket и передаем сообщение в функцию сообщения, которую я объясню позже. Мы создаем наши функции onopen, onmessage и onclose. Обратите внимание, что мы также показываем пользователю статус сокета; в этом нет необходимости, но я включил его сюда, поскольку это может быть полезно для отладки.

  • СОЕДИНЕНИЕ = 0
  • OPEN = 1
  • ЗАКРЫТО = 2

Функция message () довольно проста, она берет некоторый текст, который мы хотим показать пользователю, и добавляет его в chatLog. Мы создаем соответствующий класс для тегов абзаца в функциях событий сокета, поэтому в функции сообщения есть только один закрывающий тег абзаца.


Если вы следили за этим, молодец! Нам удалось создать базовый шаблон HTML / CSS, создать и установить соединение WebSocket и держать пользователя в курсе, как был достигнут прогресс с соединением.


Теперь вместо кнопки отправки мы можем определить, когда пользователь нажимает кнопку возврата на клавиатуре, и запустить функцию отправки. «13», которое вы видите ниже, является клавишей ASCII для кнопки ввода.

А вот и функция send ():

Помните, что то, что вы видите выше, может быть небольшим фрагментом кода, но в действительности код, который нам действительно нужен:

Дополнительный код выполняет ряд действий: обнаружение того, что пользователь ничего не вводил, но все же нажимает клавишу возврата, очистка поля ввода и вызов функций сообщения.


Закрытие сокета довольно просто: прикрепите обработчик щелчков к нашей кнопке отключения, и все готово!



Нам понадобится доступ к командной строке. К счастью, у XAMPP есть удобная опция оболочки. Нажмите «Оболочка» на панели управления XAMPP и введите:

Вы запустили сервер WebSocket!


Когда страница загружается, попытка установить соединение через WebSocket (попробуйте отредактировать код, чтобы у пользователя была возможность подключения / отключения). Затем пользователь может вводить сообщения и получать сообщения с сервера.


Спасибо за прочтение; Я надеюсь, вам понравился этот урок! Помните, какими бы захватывающими ни были WebSockets, все может измениться Вы можете обратиться сюда, чтобы быть в курсе API W3C WebSocket .

Если вы хотите больше работать с HMTL5, взгляните на широкий выбор элементов кода HTML5 на Envato Market. Есть аудиоплееры , отзывчивые видео галереи , интерактивные карты и многое другое.

HTML5 элементы кода на Envato Market
HTML5 элементы кода на Envato Market