Интерфейс 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, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.net.http/java/net/http/WebSocket.Listener.html