Введение в Websockets в связке с Ruby (Sinatra)
В этой статье мы рассмотрим введение в WebSockets и реализацию базового приложения для чата с использованием EventMachine-WebSocket.
WebSockets — одна из фич в спецификации HTML5, которая позволяет клиенту и серверу взаимодействовать без использования AJAX или long-polling.
Что такое вебсокеты?
Согласно спецификации, вебсокеты это:
API, который позволяет веб-страницам использовать протокол WebSocket (определенный IETF) для двусторонней связи с удаленным хостом.
То есть, websockets могут использоваться вместо существующих решений для HTTP поллинга. Вебсокеты позволяют установить одно длительное TCP-соединение между клиентом и сервером. Это позволяет осуществлять полно дуплексный (двунаправленный) обмен сообщениями между обеими сторонами с очень небольшой задержкой.
Спецификация websockets определяет две новые схемы URI, ws: и wss:, для не зашифрованных и зашифрованных соединений соответственно.
Итак, начнем
Чтобы сделать чат-приложение, для начала создадим очень простое приложение Sinatra, работающее в EventMachine. Также используем сервер thin, так как он поддерживает EventMachine:
Запускаем:
Начало положено! Далее, разберемся со всем со стороны сервера.
WebSockets сервер
Для начала, настроим сервер для работы с EventMachine и обработки websocket соединения. Это делается довольно просто с использованием гема em-websocket, нам даже не нужно беспокоиться о хедерах для websocket handshake:
Этот код позаботится о handshake вебсокета с клиентами, а также о бэкенде чата. Далее настроим клиентскую часть:
WebSockets клиент
Теперь настроим клиентскую часть, чтобы она могла взаимодествовать с сервером вебсокетов, который мы только что настроили. Сервер будет принимать любые сообщения, отправляемые клиентом и бродкастить их на все остальные клиенты.
Для начала добавим базовую функцию для отображения сообщений на странице:
Теперь настроим соединение с нашим вебсокет сервером так, чтобы клиент подключался сразу как только браузер будет готов:
Дальше можем добавить логику отправки сообщения по нажатию кнопки Enter. Этот код отправит сообщение на сервер и даст пользователю знать, что сообщение было отправлено:
В конце, добавим возможность пользователям отключаться от сервера, если необходимо:
Это завршает работу над клиентской частью. Теперь клиент откроет вебсокет соединение с нашим сервером, будет отправлять/получать сообщения, и отключаться если этого захочет пользователь.
Заключение
Иии..Теперь у нас есть рабочий чат сервис! Чтобы его запустить, просто запускаем сервер:
Теперь можно зайти на http://localhost:3000/, и увидеть чат в действии. Можно открыть в нескольких браузерах чтобы потестировать.
Статья скорее для Хабра)
На хабре стыдно с очередной статьёй про Hello World на web-сокетах показываться, а здесь чуток обнажил область баш скрипта и все думают, что ты х4к3рь.
upd: тем более когда фигурирует jquery
Чувак, смотрю ты в 2012-м, закупайся биткоином!