Интерфейс 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, 2021, 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/17/docs/api/java.net.http/java/net/http/WebSocket.Listener.html