В этом уроке мы создадим базовое клиент-серверное приложение с подключением к WebSocket с использованием Active framework.
Вам необходимо импортировать следующие зависимости:
io.activej activej-launchers-http 3.0 ch.qos.logback logback-classic 1.2.3
Зависимость обратного входа является необязательной.
В этом уроке мы будем явно использовать следующие активные технологии:
- Активный HTTP – высокопроизводительные асинхронные клиентские и серверные реализации.
- Active Inject – легкая и мощная библиотека инъекций зависимостей.
- Active Launcher – высоко обобщенная
основная
реализация метода для управления жизненным циклом приложения. - Активный цикл событий – обеспечивает эффективное управление асинхронными операциями без накладных расходов на многопоточность.
- Активное обещание – высокопроизводительная и удобная альтернатива Java в будущем.
- График активного обслуживания – предназначен для использования в сочетании с Активным впрыском и Активный Launcher как средство запуска/остановки служб приложений в соответствии с их графиком зависимостей.
Сервер WebSocket Pong для настольного тенниса
Давайте создадим сервер WebSocket “Pong”. Для этой цели нам нужно предоставить RoutingServlet
и использовать map WebSocket
метод для отображения Потребитель
из WebSocket
в качестве сервлета на /пути
. Наш сервер просто примет сообщения, распечатает их и отправит обратно сообщение “Pong”.
public final class WebSocketPongServerExample extends HttpServerLauncher { @Provides AsyncServlet servlet() { return RoutingServlet.create() .mapWebSocket("/", webSocket -> webSocket.readMessage() .whenResult(message -> System.out.println("Received:" + message.getText())) .then(() -> webSocket.writeMessage(Message.text("Pong"))) .whenComplete(webSocket::close)); } public static void main(String[] args) throws Exception { WebSocketPongServerExample launcher = new WebSocketPongServerExample(); launcher.launch(args); } }
Клиент Пинга WebSocket
Теперь давайте создадим клиента, который будет отправлять сообщение “Ping” на сервер через соединение WebSocket.
public final class WebSocketPingClientExample extends Launcher { @Inject AsyncHttpClient httpClient; @Inject Eventloop eventloop; @Provides Eventloop eventloop() { return Eventloop.create(); } @Provides AsyncHttpClient client(Eventloop eventloop) { return AsyncHttpClient.create(eventloop); } @Override protected Module getModule() { return ServiceGraphModule.create(); } @Override protected void run() throws ExecutionException, InterruptedException { String url = args.length != 0 ? args[0] : "ws://127.0.0.1:8080/"; System.out.println("\nWeb Socket request: " + url); CompletableFuture> future = eventloop.submit(() -> { System.out.println("Sending: Ping"); return httpClient.webSocketRequest(HttpRequest.get(url)) .then(webSocket -> webSocket.writeMessage(Message.text("Ping")) .then(webSocket::readMessage) .whenResult(message -> System.out.println("Received: " + message.getText())) .whenComplete(webSocket::close)); }); future.get(); } public static void main(String[] args) throws Exception { WebSocketPingClientExample example = new WebSocketPingClientExample(); example.launch(args); } }
Во-первых, мы предоставляем необходимые зависимости: AsyncHttpClient
и Цикл событий
для него. Далее нам нужно переопределить getModule запуска
и запустить
методы. getМодуль
предоставляет приложению базовый модуль бизнес-логики, в то время как run
представляет основной Метод запуска
. В методе run
мы создаем поставщика и переопределяем его метод get
с помощью лямбды. Здесь мы вызываем AsyncHttpClient.WebSocket запрос
, который отправляет запрос и возвращает Обещание
веб-кармана. Затем мы создаем функцию, которая отправляет сообщение “Ping” и получает ответ от сервера.
И все, ваше приложение WebSocket готово к использованию. Во-первых, запустите реализацию сервера и клиента. Вы можете найти исходный код примеров на GitHub .
Оригинал: “https://dev.to/activej/websockets-with-activej-4a1i”