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”