Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Что происходит в websocketHandler'е в данном случае?

Работая с vert.x core 3.2.1 увидел такую конфигурацию сервера, использующего веб-соккет:
vertx.createHttpServer().websocketHandler(ws -> ws.handler(ws::writeBinaryMessage)).requestHandler(req -> { if (req.uri().equals("/")) req.response().sendFile("ws.html"); }).listen(8080);
По записи я понял,что на платформе вертекса мы создаем http-сервер который с помощью метода listen,слушающего порт 8080 находится в ожидании возможного к нему подключения. Также тут используется вебсокетный хендлер, который связан с request-хендлером. Но четкого понимания о том,что происходит в websocketHandler нет. Лямбда-выражения и ::-оператор меня запутали. Объясните пожалуйста что исполняет данный код, или если возможно,распишите эту конструкцию без лямбд.


Ответ

После проб и ошибок,вроде бы удалось привести это заклинание с лямбдами к более простому и громоздкому виду:
server.websocketHandler(ws -> ws.handler(ws::writeBinaryMessage)) .requestHandler(req -> { if (req.uri().equals("smile")) req.response().end("hello");});
server.websocketHandler(new Handler() { @Override public void handle(ServerWebSocket webs) { webs.writeBinaryMessage(Buffer.buffer()); } }).requestHandler(new Handler() { @Override public void handle(HttpServerRequest req) { if (req.uri().equals("smile")) req.response().end("hello"); } });
В итоге видим следующее:первый хендлер в данном туториале работает с веб-сокетным соединением и в нем можно осуществлять обмен сообщениями, второй хендлер предназначен для работы с http и выводит в браузер "hello". Таким образом вертекс предоставляет набор интерфейсов(хендлеров),которые позволяют работать с соединениями различного типа.

Комментариев нет:

Отправить комментарий