Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door Mikael Mengistu
Met de Java-client kunt u verbinding maken met een ASP.NET Core-server SignalR vanuit Java-code, inclusief Android-apps. Net als de JavaScript-client en de .NET-client kunt u met de Java-client in realtime berichten ontvangen en verzenden naar een hub. De Java-client is beschikbaar in ASP.NET Core 2.2 of hoger.
De voorbeeld-Java-console-app waarnaar in dit artikel wordt verwezen, maakt gebruik van de SignalR Java-client.
Voorbeeldcode bekijken of downloaden (hoe download je)
SignalR Het Java-clientpakket installeren
Met het JAR-bestand signalr-7.0.0 kunnen clients verbinding maken met SignalR hubs. Zie de maven-zoekresultaten om het meest recente versienummer van het JAR-bestand te vinden.
Als u Gradle gebruikt, voegt u de volgende regel toe aan de dependencies sectie van uw build.gradle-bestand :
implementation 'com.microsoft.signalr:signalr:7.0.0'
Als u Maven gebruikt, voegt u de volgende regels toe binnen het element van het <dependencies>pom.xml bestand:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Verbinding maken met een hub
Om een HubConnectionte bepalen, moet de HubConnectionBuilder worden gebruikt. De hub-URL en het logboekniveau kunnen worden geconfigureerd tijdens het bouwen van een verbinding. Configureer alle vereiste opties door een van de HubConnectionBuilder methoden aan te roepen voordat build. Start de verbinding met start.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
Hubmethoden aanroepen vanaf de client
Een aanroep naar send roept een hubmethode aan. Geef de naam van de hubmethode en eventuele argumenten door die in de hubmethode zijn gedefinieerd.send
hubConnection.send("Send", input);
Note
Hubmethoden aanroepen vanaf een client wordt alleen ondersteund wanneer u de Azure SignalR Service gebruikt in standaardmodus. Zie Veelgestelde vragen (azure-signalr GitHub-opslagplaats)voor meer informatie.
Clientmethoden aanroepen vanuit hub
Gebruik hubConnection.on dit om methoden te definiƫren op de client die de hub kan aanroepen. Definieer de methoden na het bouwen, maar voordat u de verbinding start.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Logboekregistratie toevoegen
De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:
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.
Dit kan veilig worden genegeerd.
Opmerkingen bij android-ontwikkeling
Denk bij het bepalen van de versie van de Android SDK met betrekking tot de compatibiliteit van de SignalR clientfuncties aan de volgende zaken:
- De SignalR Java-client wordt uitgevoerd op Android-API-niveau 16 of hoger.
- Voor het maken van verbinding via de Azure-service SignalR is Android API Level 20 of hoger vereist omdat voor de Azure-service SignalR TLS 1.2 is vereist en geen ondersteuning biedt voor SHA-1-gebaseerde coderingssuites. Android heeft ondersteuning toegevoegd voor SHA-256 (en hoger) coderingssuites in API-niveau 20.
Bearer-tokenverificatie configureren
In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een 'toegangstokenfactory' op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Klasse-informatie doorgeven in Java
Wanneer gebruikers de on, invokeof stream methoden van HubConnection de Java-client aanroepen, moeten ze een Type object doorgeven in plaats van een Class<?> object om een algemeen Object doorgegeven aan de methode te beschrijven. Een Type kan worden verkregen met behulp van de opgegeven TypeReference klasse. Als u bijvoorbeeld een aangepaste algemene klasse met de naam Foo<T> gebruikt, verkrijgt u Type op de volgende manier:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
Voor niet-generieken, zoals primitieven of andere niet-geparameteriseerde typen, zoals String, kunt u gewoon de ingebouwde .class gebruiken.
Wanneer u een van deze methoden aanroept met een of meer objecttypen, gebruikt u de syntaxis van generics bij het aanroepen van de methode. Als u bijvoorbeeld een on handler registreert voor een methode met de naam func, die als argumenten een tekenreeks en een Foo<String> object gebruikt, gebruikt u de volgende code om een actie in te stellen om de argumenten af te drukken:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Deze conventie is nodig omdat we geen volledige informatie over complexe typen met de Object.getClass methode kunnen ophalen vanwege typeverwijdering in Java. Als u bijvoorbeeld getClass op een ArrayList<String> aanroept, zou dit niet Class<ArrayList<String>> retourneren, maar eerder Class<ArrayList> geven, waardoor de deserializer niet voldoende informatie heeft om een binnenkomend bericht correct te deserialiseren. Hetzelfde geldt voor aangepaste objecten.
Bekende beperkingen
- Transportterugval en Server-Sent Events-transport worden niet ondersteund.
- Transportterugval en Server-Sent Events-transport worden niet ondersteund.
- Alleen het JSON-protocol wordt ondersteund.
- Alleen het JSON-protocol wordt ondersteund.
- Alleen het WebSockets-transport wordt ondersteund.
- Streaming wordt nog niet ondersteund.