Клиенты WebSocket с java.net.http
Используйте стандартный асинхронный клиент WebSocket вместо добавления сторонней зависимости.
Сравнение кода
✕ Third-party library
WebSocketClient client =
new WebSocketClient(serverUri) {
@Override
public void onMessage(String message) {
handle(message);
}
};
client.connect();
✓ Java 11+
HttpClient.newHttpClient()
.newWebSocketBuilder()
.buildAsync(serverUri,
new WebSocket.Listener() {
@Override
public CompletionStage<?> onText(
WebSocket socket,
CharSequence data,
boolean last) {
handle(data.toString());
return WebSocket.Listener.super
.onText(socket, data, last);
}
});
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Без дополнительной зависимости
Клиент WebSocket входит в состав JDK.
Асинхронный API
Установление соединения и обработка сообщений компонуются с CompletionStage.
Общий стек HTTP
Для прокси, TLS и исполнителя используются стандартные средства JDK.
Старый подход
Сторонний клиент WebSocket
Современный подход
java.net.http.WebSocket
Начиная с JDK
11
Сложность
Средний
Поддержка JDK
Клиенты WebSocket с java.net.http
Доступно
Широко доступно начиная с JDK 11 (сентябрь 2018)
Как это работает
Пакет java.net.http включает асинхронный клиент WebSocket, интегрированный со стандартным HTTP-клиентом. Соединения устанавливаются с помощью CompletableFuture, обратные вызовы слушателя поддерживают неблокирующую обработку сообщений через CompletionStage, а клиент использует стандартные настройки прокси, TLS и исполнителя из JDK.
Связанная документация
Доказательство