Рубрики
Без рубрики

Создание сервера WebSocket с помощью платформы Spark

WebSocket – это протокол, который обеспечивает связь между сервером и браузером. У него есть преимущество… Помеченный java, spark, websockets, rtc.

WebSocket – это протокол, который обеспечивает связь между сервером и браузером. Он имеет преимущество перед RESTful HTTP, поскольку связь осуществляется как двунаправленно, так и в режиме реального времени. Это позволяет серверу уведомлять клиента в любое время вместо регулярного опроса клиента на предмет обновлений.

В этой серии постов я собираюсь показать вам три различных способа создания сервера WebSocket на Java с использованием Spring Boot , Spark Framework и Java API для WebSockets .

Предпосылки

Вы будете использовать Gradle для управления вашими зависимостями и запуска вашего приложения.

Кроме того, вам необходимо убедиться, что у вас установлена копия JDK. В этом уроке я буду использовать JDK 8.

Веб-сайты с фреймворком Spark

Spark – это микро-фреймворк для создания веб-приложений Java и Kotlin.

Создайте проект

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

mkdir websocket-spark-framework
cd websocket-spark-framework
gradle init --type=java-application

Добавьте зависимость Spark

Добавьте следующую зависимость в зависимости блок build.gradle :

compile 'com.sparkjava:spark-core:2.7.2'

В отличие от Создание сервера веб-сокетов с помощью Spring Boot , веб-сокеты с Spark работают только со встроенным сервером Jetty , и вам нужно будет определить путь и обработчик перед любыми HTTP-маршрутами.

Создайте обработчик веб-сокета

Сообщения WebSocket могут быть как текстовыми, так и двоичными. Вы собираетесь создать обработчик, который может обрабатывать оба этих сообщения.

Создайте новый класс с именем WebSocketHandler и аннотируйте его с помощью @WebSocket :

import org.eclipse.jetty.websocket.api.annotations.WebSocket;

@WebSocket
public class WebSocketHandler {

}

Каждое событие, которое обрабатывает WebSocketHandler , определяется аннотацией. Вы можете использовать аннотацию @OnWebSocketMessage для пометки методов получения двоичных или текстовых событий.

В демонстрационных целях вы собираетесь создать эхо-сервер, который будет передавать полученное сообщение обратно отправителю.

Добавьте следующие методы:

@OnWebSocketMessage
public void handleTextMessage(Session session, String message) throws IOException {
    System.out.println("New Text Message Received");
    session.getRemote().sendString(message);
}

@OnWebSocketMessage
public void handleBinaryMessage(Session session, byte[] buffer, int offset, int length) throws IOException {
    System.out.println("New Binary Message Received");
    session.getRemote().sendBytes(ByteBuffer.wrap(buffer));
}

Обратите внимание, что сигнатура метода определяет, какой тип сообщения будет обрабатываться методом. См. OnWebSocketMessage документация по аннотациям для списка поддерживаемых сигнатур методов.

Зарегистрируйте обработчик веб-сокета

Для того, чтобы использовать WebSocketHandler , он должен быть зарегистрирован.

Откройте класс Приложение , созданный для вас Gradle. Удалить Получите метод и содержимое метода main , так как вам это тоже не понадобится.

Внутри основного метода добавьте следующее, чтобы зарегистрировать WebSocketHandler на пути /сокета :

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    webSocket("/socket", WebSocketHandler.class);
}

Создайте клиент для тестирования Вашего приложения

Вам нужно будет создать клиент для тестирования вашего сервера WebSocket. Вы захотите протестировать отправку как текстовых, так и двоичных сообщений. Это можно сделать с помощью JavaScript.

Создайте папку ресурсы внутри папки src/main . Внутри папки ресурсы создайте папку статическая .

Добавьте следующее в index.html внутри папки src/main/ресурсы/статические :



    
    Sample WebSocket Client


Type a message and hit send:

Select an image and hit send:

Теперь вам нужно будет настроить Spark для поиска вашего index.html и для инициализации сервера при запуске приложения. Вы также можете определить порт, на котором сервер будет прослушивать соединения.

Внутри основного метода класса приложения добавьте следующее ниже WebSocket :

staticFileLocation("static");
port(8080)
init();

Запустите приложение

Ваш сервер WebSocket теперь завершен. Запустите приложение с помощью команды gradle run внутри каталога приложения.

Вы можете получить доступ к своему приложению по адресу http://localhost:8080 где вас встретит следующая страница:

Сообщение “подключено” указывает на то, что клиент JavaScript смог установить соединение.

Попробуйте отправить текстовое сообщение, введя его в поле ввода и нажав на кнопку отправить. Также попробуйте загрузить изображение. В обоих случаях вы должны увидеть одно и то же сообщение и изображение, отраженное эхом.

Вывод

В этом уроке вы узнали, как создать сервер WebSocket с помощью Spark, который может принимать как двоичные, так и текстовые сообщения. Готовый код для этого руководства можно найти в репозитории nexmo-community/websocket-spark-framework .

Хотите внедрить веб-сокеты в свой существующий Весна применение? Может быть, вы хотите узнать о Создание сервера WebSocket с помощью Spring Boot ?

Никаких рамок? Нет проблем! Следите за обновлениями для следующего урока, в котором я покажу вам, как создать сервер WebSocket с использованием Java API для WebSockets.

Знаете ли вы, что вы можете использовать WebSocket в качестве конечной точки в объекте управления вызовами Nexmo ? Посмотрите на этот пример на Потоковые вызовы в браузер с помощью голосовых веб-сокетов .

Хотите увидеть интересное использование веб-сокетов? Загляните в репозиторий nexmo-community/dtmf-snake , чтобы увидеть некоторый код, который позволяет вам играть в игру snake, используя двухтональные многочастотные сигналы.

Оригинал: “https://dev.to/vonagedev/creating-a-websocket-server-with-the-spark-framework-1837”