Интерфейс 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(WebSocket webSocket,
ByteBuffer data,
boolean last) | Получено двоичное данные. |
default CompletionStage<?> | onClose(WebSocket webSocket,
int statusCode,
String reason) | Получено сообщение Close, указывающее на закрытие ввода WebSocket. |
default void | onError(WebSocket webSocket,
Throwable error) | Произошла ошибка. |
default void | onOpen(WebSocket webSocket) | Подключён |
default CompletionStage<?> | onPing(WebSocket webSocket,
ByteBuffer message) | Получено сообщение Ping. |
default CompletionStage<?> | onPong(WebSocket webSocket,
ByteBuffer message) | Получено сообщение Pong. |
default CompletionStage<?> | onText(WebSocket webSocket,
CharSequence data,
boolean last) | Получено текстовые данные. |
Методы
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) Получено сообщение Ping.
В соответствии с протоколом 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) Получено сообщение Pong.
В соответствии с протоколом 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) Получает сообщение Close, указывающее, что вход WebSocket закрыт.
Это последний вызов от указанного 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— причина - Возвращаемое значение:
- a
CompletionStage, которое завершается, когдаWebSocketможет быть закрыт; илиnull, если он может быть закрыт немедленно
onError
default void onError(WebSocket webSocket,
Throwable error) Произошла ошибка.
Это последний вызов от указанного WebSocket. К моменту начала этого вызова как вход, так и выход WebSocket будут закрыты. WebSocket может вызвать этот метод для ассоциированного слушателя в любое время после вызова onOpen, независимо от того, были ли запрошены какие-либо вызовы от WebSocket.
Если из этого метода будет брошено исключение, поведение является неопределенным.
- Параметры:
-
webSocket— WebSocket, на котором произошла ошибка -
error— ошибка
© 1993, 2020, 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/11/docs/api/java.net.http/java/net/http/WebSocket.Listener.html