Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Авторы: Микаэль Менгисту (Mikael Mengistu)
Клиент Java позволяет подключаться к серверу ASP.NET Core SignalR из кода Java, включая приложения Android. Как и клиент JavaScript и клиент .NET, клиент Java позволяет получать и отправлять сообщения в концентратор в режиме реального времени. Клиент Java доступен в ASP.NET Core 2.2 или более поздней версии.
Пример консольного приложения Java, на которое ссылается в этой статье, использует SignalR клиент Java.
Просмотреть или скачать образец кода (описание загрузки)
Установка клиентского SignalR пакета Java
JAR-файл signalr-7.0.0 позволяет клиентам подключаться к хабам SignalR. Сведения о последнем номере версии JAR-файла см. в результатах поиска Maven.
При использовании Gradle добавьте следующую строку в dependencies раздел файла build.gradle :
implementation 'com.microsoft.signalr:signalr:7.0.0'
При использовании Maven добавьте в элемент <dependencies> файла следующие строкиpom.xml:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Подключение к концентратору
Чтобы установить HubConnectionобъект, HubConnectionBuilder следует использовать. При создании подключения можно настроить URL-адрес концентратора и уровень журнала. Настройте все необходимые параметры путем вызова любого из HubConnectionBuilder методов до build. Запустите подключение с start.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
Методы концентратора вызовов из клиента
Вызов вызова send метода концентратора. Передайте имя метода концентратора и все аргументы, определенные в методе sendконцентратора.
hubConnection.send("Send", input);
Note
Вызов методов концентратора из клиента поддерживается только при использовании службы Azure SignalR в режиме по умолчанию . Для получения дополнительной информации см. часто задаваемые вопросы (репозиторий GitHub azure-signalr).
Вызов клиентских методов из концентратора
Используется hubConnection.on для определения методов на клиенте, который может вызывать концентратор. Определите методы после сборки, но перед началом подключения.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Добавить логирование
Клиент SignalR Java использует библиотеку SLF4J для ведения журнала. Это высокоуровневый API ведения журнала, позволяющий пользователям библиотеки выбрать собственную реализацию ведения журнала, введя определенную зависимость ведения журнала. В следующем фрагменте кода показано, как использовать java.util.logging его с клиентом SignalR Java.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Если вы не настроите ведение журнала в зависимостях, SLF4J загружает средство ведения журнала без операций по умолчанию со следующим предупреждением:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Это предупреждение можно игнорировать.
Заметки о разработке Android
В отношении совместимости пакета SDK для Android для SignalR клиентских функций следует учитывать следующие элементы при указании целевой версии пакета SDK для Android:
- SignalR Клиент Java будет работать на уровне API Android 16 или более поздней версии.
- Для подключения через службу Azure потребуется уровень API Android 20 или более поздней версии, так как SignalRSignalR требует TLS 1.2 и не поддерживает наборы шифров на основе SHA-1. Android добавил поддержку наборов шифров SHA-256 (и выше) на уровне API 20.
Настройка проверки подлинности маркера носителя
В клиенте SignalR Java можно настроить маркер носителя для проверки подлинности, предоставив "фабрику маркеров доступа" httpHubConnectionBuilder. Используйте . При вызове Single.defer можно написать логику для создания маркеров доступа для клиента.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Передача сведений о классе в Java
При вызове onметода invokeили stream методах HubConnection в клиенте Java пользователи должны передать Type объект, а не Class<?> объект, чтобы описать любой универсальный Object метод. Его Type можно получить с помощью предоставленного TypeReference класса. Например, используя настраиваемый универсальный класс с именем Foo<T>, следующий код получает Typeследующий код:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
Для не универсальных типов, таких как примитивы или другие не параметризованные типы String, можно просто использовать встроенные .class.
При вызове одного из этих методов с одним или несколькими типами объектов используйте синтаксис универсальных элементов при вызове метода. Например, при регистрации обработчика on для именованного funcметода, который принимает в качестве аргументов строку и Foo<String> объект, используйте следующий код, чтобы задать действие для печати аргументов:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Это соглашение необходимо, так как мы не можем получить полные сведения о сложных типах с методом Object.getClass из-за стирки типов в Java. Например, вызов getClassArrayList<String> не вернет Class<ArrayList<String>>, а не Class<ArrayList>дает десериализатору достаточно информации, чтобы правильно десериализировать входящее сообщение. То же самое верно для пользовательских объектов.
Известные ограничения
- Резервный вариант транспорта и транспорт отправленных событий сервера не поддерживается.
- Резервный вариант транспорта и транспорт отправленных событий сервера не поддерживается.
- Поддерживается только протокол JSON.
- Поддерживается только протокол JSON.
- Поддерживается только транспорт WebSockets.
- Потоковая передача пока не поддерживается.
Дополнительные ресурсы
ASP.NET Core