Интерфейс WebSocket.Listener
- Вложенный интерфейс:
WebSocket
public static interface WebSocket.Listener
WebSocket. Объект WebSocket вызывает методы связанного слушателя, передавая себя в качестве аргумента. Эти методы вызываются в потокобезопасном режиме, так что следующий вызов может начаться только после завершения предыдущего.
При получении данных, WebSocket вызывает метод приема. Методы onText, onBinary, onPing и onPong должны возвращать CompletionStage, который завершается, как только сообщение будет получено слушателем. Если метод слушателя возвращает null вместо CompletionStage, WebSocket будет вести себя так, как если бы слушатель вернул CompletionStage, который уже завершен нормально.
Исключение IOException, возникшее в WebSocket, приведет к вызову onError с этим исключением (если вход не закрыт). Если метод слушателя бросает исключение или CompletionStage, возвращённое от метода, завершается с исключением, WebSocket вызовет onError с этим исключением.
- Примечание по API:
- Строго последовательный порядок вызовов от
WebSocketдоListenerозначает, в частности, что методыListenerобрабатываются как нерекурсивные. Это означает, что реализациямListenerне нужно беспокоиться о возможной рекурсии или о порядке, в котором они вызываютWebSocket.requestпо отношению к своей логике обработки.Внимания может потребоваться, если слушатель связан с более чем одним экземпляром
WebSocket. В этом случае вызовы, связанные с разными экземплярамиWebSocket, могут не быть упорядочены и могут даже происходить одновременно.CompletionStage, возвращаемые методами приема, не имеют ничего общего со счётчиком вызовов. Иными словами,CompletionStageне обязательно должен быть завершён, чтобы получить дополнительные вызовы методов слушателя. Вот пример слушателя, который запрашивает вызовы по одному, пока не будет накоплено полное сообщение, затем обрабатывает результат и завершаетCompletionStage:WebSocket.Listener listener = new WebSocket.Listener() { List<CharSequence> parts = new ArrayList<>(); CompletableFuture<?> accumulatedMessage = new CompletableFuture<>(); public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) { parts.add(message); webSocket.request(1); if (last) { processWholeText(parts); parts = new ArrayList<>(); accumulatedMessage.complete(null); CompletionStage<?> cf = accumulatedMessage; accumulatedMessage = new CompletableFuture<>(); return cf; } return accumulatedMessage; } }; - С:
- 11
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default CompletionStage |
onBinary |
Получено двоичное данные. |
default CompletionStage |
onClose |
Получено сообщение Close, указывающее на закрытие входного потока WebSocket. |
default void |
onError |
Произошла ошибка. |
default void |
onOpen |
Подключен WebSocket. |
default CompletionStage |
onPing |
Получено сообщение Ping. |
default CompletionStage |
onPong |
Получено сообщение Pong. |
default CompletionStage |
onText |
Получено текстовые данные. |
Подробное описание методов
onOpen
default void onOpen(WebSocket webSocket)
WebSocket установлено. Это начальное обращение, которое выполняется один раз. Обычно используется для запроса дополнительных обращений.
- Требования к реализации:
- Стандартная реализация эквивалентна:
webSocket.request(1); - Параметры:
-
webSocket- подключенный WebSocket
onText
default CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last)
Верните CompletionStage, которое будет использовано WebSocket в качестве указания, что он может освободить CharSequence. Не обращайтесь к CharSequence после завершения этого CompletionStage.
- Требования к реализации:
- Стандартная реализация эквивалентна:
webSocket.request(1); return null; - Примечание по реализации:
dataвсегда является допустимой последовательностью UTF-16.- Параметры:
-
webSocket- WebSocket, на котором получены данные -
data- данные -
last- признак завершения сообщения - Возвращает:
CompletionStage, которое завершается, когдаCharSequenceможет быть освобожден; илиnull, если освобождение возможно немедленно
onBinary
default CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last)
Эти данные расположены в байтах от позиции буфера до его предела.
Верните CompletionStage, которое будет использовано WebSocket в качестве указания, что он может освободить ByteBuffer. Не обращайтесь к ByteBuffer после завершения этого CompletionStage.
- Требования к реализации:
- Стандартная реализация эквивалентна:
webSocket.request(1); return null; - Параметры:
-
webSocket- WebSocket, на котором получены данные -
data- данные -
last- признак завершения сообщения - Возвращает:
CompletionStage, которое завершается, когдаByteBufferможет быть освобожден; илиnull, если освобождение возможно немедленно
onPing
default CompletionStage<?> onPing(WebSocket webSocket, ByteBuffer message)
Как гарантируется протоколом WebSocket, сообщение состоит не более чем из 125 байт. Эти байты расположены от позиции буфера до его предела.
Учитывая, что реализация WebSocket автоматически отправляет ответ pong при получении ping, редко требуется явно отправлять pong при получении ping.
Верните CompletionStage, которое будет использовано WebSocket в качестве сигнала, что он может освободить ByteBuffer. Не обращайтесь к ByteBuffer после завершения этого CompletionStage.
- Требования к реализации:
- Стандартная реализация эквивалентна:
webSocket.request(1); return null; - Параметры:
-
webSocket- WebSocket, на котором получено сообщение -
message- сообщение - Возвращает:
CompletionStage, которое завершается, когдаByteBufferможет быть освобожден; илиnull, если освобождение возможно немедленно
onPong
default CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message)
Как гарантируется протоколом WebSocket, сообщение состоит не более чем из 125 байт. Эти байты расположены от позиции буфера до его предела.
Верните CompletionStage, которое будет использовано WebSocket в качестве сигнала, что он может освободить ByteBuffer. Не обращайтесь к ByteBuffer после завершения этого CompletionStage.
- Требования к реализации:
- Стандартная реализация эквивалентна:
webSocket.request(1); return null; - Параметры:
-
webSocket- WebSocket, на котором получено сообщение -
message- сообщение - Возвращает:
CompletionStage, которое завершается, когдаByteBufferможет быть освобожден; илиnull, если освобождение возможно немедленно
onClose
default CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason)
Это последнее обращение от указанного WebSocket. К моменту начала этого обращения входной поток WebSocket будет закрыт.
Сообщение Close состоит из кода состояния и причины закрытия. Код состояния — целое число из диапазона 1000 <= code <= 65535. reason — строка, которая имеет UTF-8 представление длиной не более 123 байт.
Если выходной поток WebSocket еще не закрыт, возвращаемое этим методом CompletionStage будет использоваться как указание, что выходной поток WebSocket можно закрыть. WebSocket закроет свой выходной поток как можно раньше, завершив возвращенное CompletionStage или вызвав методы sendClose или abort.
- Примечание к API:
- Возвращение
CompletionStage, которое никогда не завершается, фактически отключает взаимное закрытие выхода.Для задания пользовательского кода закрытия или кода причины закрытия метод
sendCloseможет быть вызван внутри обращенияonClose:public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) { webSocket.sendClose(CUSTOM_STATUS_CODE, CUSTOM_REASON); return new CompletableFuture<Void>(); } - Требования к реализации:
- Стандартная реализация этого метода возвращает
null, указывая, что выходной поток должен быть закрыт немедленно. - Параметры:
-
webSocket- WebSocket, на котором получено сообщение -
statusCode- код состояния -
reason- причина - Возвращает:
CompletionStage, которое завершается, когдаWebSocketможет быть закрыт; илиnull, если закрытие возможно немедленно
onError
default void onError(WebSocket webSocket, Throwable error)
Это последнее обращение от указанного WebSocket. К моменту начала этого обращения и входной, и выходной потоки WebSocket будут закрыты. WebSocket может вызвать этот метод для связанного слушателя в любое время после вызова onOpen, независимо от того, запрашивались ли от WebSocket какие-либо обращения.
Если из этого метода будет брошено исключение, поведение будет неопределенным.
- Параметры:
-
webSocket- WebSocket, на котором произошла ошибка -
error- ошибка
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.net.http/java/net/http/WebSocket.Listener.html