Udostępnij za pośrednictwem


klient java platformy ASP.NET Core SignalR

Autor: Mikael Mengistu

Klient Java umożliwia nawiązywanie połączenia z serwerem ASP.NET Core SignalR z kodu Java, w tym z aplikacjami systemu Android. Podobnie jak klient JavaScript i klient platformy .NET, klient Java umożliwia odbieranie i wysyłanie komunikatów do centrum w czasie rzeczywistym. Klient Java jest dostępny w wersji ASP.NET Core 2.2 lub nowszej.

Przykładowa aplikacja konsolowa Java, do których odwołuje się w tym artykule, używa SignalR klienta Java.

Wyświetl lub pobierz przykładowy kod (jak pobrać)

SignalR Instalowanie pakietu klienta Java

Plik signalrJAR -7.0.0 umożliwia klientom łączenie się z SignalR koncentratorami. Aby znaleźć najnowszy numer wersji pliku JAR, zobacz wyniki wyszukiwania narzędzia Maven.

W przypadku korzystania z narzędzia Gradle dodaj następujący wiersz do dependencies sekcji pliku build.gradle :

implementation 'com.microsoft.signalr:signalr:7.0.0'

W przypadku korzystania z narzędzia Maven dodaj następujące wiersze wewnątrz <dependencies> elementu pom.xml pliku:

<dependency>
    <groupId>com.microsoft.signalr</groupId>
    <artifactId>signalr</artifactId>
    <version>1.0.0</version>
</dependency>

Nawiązywanie połączenia z koncentratorem

Aby ustanowić element HubConnection, należy użyć elementu HubConnectionBuilder . Adres URL centrum i poziom dziennika można skonfigurować podczas tworzenia połączenia. Skonfiguruj wszystkie wymagane opcje, wywołując dowolną z HubConnectionBuilder metod przed build. Uruchom połączenie za pomocą polecenia start.

HubConnection hubConnection = HubConnectionBuilder.create(input)
        .build();

Metody centrum wywołań od klienta

Wywołanie metody w celu send wywołania metody koncentratora. Przekaż nazwę metody centrum i wszystkie argumenty zdefiniowane w metodzie hub na send.

hubConnection.send("Send", input);

Uwaga

Wywoływanie metod centrum od klienta jest obsługiwane tylko w przypadku korzystania z usługi platformy Azure SignalR w trybie domyślnym . Aby uzyskać więcej informacji, zobacz Często zadawane pytania (azure —signalr repozytorium GitHub).

Wywoływanie metod klienta z centrum

Służy hubConnection.on do definiowania metod na kliencie, który centrum może wywołać. Zdefiniuj metody po utworzeniu, ale przed rozpoczęciem połączenia.

hubConnection.on("Send", (message) -> {
    System.out.println("New Message: " + message);
}, String.class);

Dodawanie rejestrowania

Klient SignalR Java używa biblioteki SLF4J do rejestrowania. Jest to interfejs API rejestrowania wysokiego poziomu, który umożliwia użytkownikom biblioteki wybranie własnej implementacji rejestrowania przez wprowadzenie określonej zależności rejestrowania. Poniższy fragment kodu pokazuje, jak używać go java.util.logging z klientem SignalR Java.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Jeśli nie skonfigurujesz rejestrowania w zależnościach, SLF4J ładuje domyślny rejestrator bez operacji z następującym komunikatem ostrzegawczym:

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.

Można to bezpiecznie zignorować.

Uwagi dotyczące programowania w systemie Android

Jeśli chodzi o zgodność zestawu Android SDK dla SignalR funkcji klienta, należy wziąć pod uwagę następujące elementy podczas określania docelowej wersji zestawu Android SDK:

  • Klient SignalR Java zostanie uruchomiony na poziomie 16 i nowszym interfejsu API systemu Android.
  • Nawiązywanie połączenia za pośrednictwem usługi platformy Azure wymaga interfejsu API systemu Android na poziomie 20 i nowszych, ponieważ usługa platformy SignalR Azure SignalR wymaga protokołu TLS 1.2 i nie obsługuje zestawów szyfrowania opartych na algorytmie SHA-1. System Android dodał obsługę mechanizmów szyfrowania SHA-256 (i nowszych) w interfejsie API Level 20.

Konfigurowanie uwierzytelniania tokenu elementu nośnego

W kliencie SignalR języka Java można skonfigurować token elementu nośnego do użycia do uwierzytelniania, udostępniając "fabrykę tokenów dostępu" do programu HttpHubConnectionBuilder. Użyj funkcji withAccessTokenFactory, aby udostępnić pojedynczy <ciąg> RxJava. Wywołanie metody Single.defer umożliwia napisanie logiki w celu utworzenia tokenów dostępu dla klienta.

HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Przekazywanie informacji o klasie w języku Java

Podczas wywoływania onmetody HubConnection , invokelub stream w kliencie Java użytkownicy powinni przekazać Type obiekt, a nie Class<?> obiekt, aby opisać wszystkie ogólne Object przekazane do metody . Element Type można uzyskać przy użyciu podanej TypeReference klasy. Na przykład użycie niestandardowej klasy ogólnej o nazwie Foo<T>, następujący kod pobiera element Type:

Type fooType = new TypeReference<Foo<String>>() { }).getType();

W przypadku typów innych niż ogólne, takich jak typy pierwotne lub inne typy niesparametryzowane, takie jak String, można po prostu użyć wbudowanego elementu .class.

Podczas wywoływania jednej z tych metod z co najmniej jednym typem obiektu użyj składni generics podczas wywoływania metody . Na przykład podczas on rejestrowania programu obsługi dla metody o nazwie func, która przyjmuje jako argumenty Ciąg i Foo<String> obiekt, użyj następującego kodu, aby ustawić akcję w celu wyświetlenia argumentów:

hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
    System.out.println(param1);
    System.out.println(param2);
}, String.class, fooType);

Ta konwencja jest niezbędna, ponieważ nie można pobrać pełnych informacji o typach złożonych z Object.getClass metodą z powodu wymazywania typów w języku Java. Na przykład wywołanie getClass metody na ArrayList<String> obiekcie nie zwróci Class<ArrayList<String>>wartości , ale raczej Class<ArrayList>, co nie daje deserializatorowi wystarczającej ilości informacji, aby poprawnie deserializować komunikat przychodzący. To samo dotyczy obiektów niestandardowych.

Znane ograniczenia

  • Rezerwowy transport i transport zdarzeń wysłanych przez serwer nie są obsługiwane.
  • Rezerwowy transport i transport zdarzeń wysłanych przez serwer nie są obsługiwane.
  • Obsługiwany jest tylko protokół JSON.
  • Obsługiwany jest tylko protokół JSON.
  • Obsługiwany jest tylko transport obiektów WebSocket.
  • Przesyłanie strumieniowe nie jest jeszcze obsługiwane.

Dodatkowe zasoby