Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Java-klienten gör det möjligt att ansluta till en ASP.NET Core SignalR-server från Java-kod, inklusive Android-appar. Precis som JavaScript-klienten och .NET-klientenkan du med Java-klienten ta emot och skicka meddelanden till en hubb i realtid. Java-klienten är tillgänglig i ASP.NET Core 2.2 eller senare.
Java-exempelkonsolappen som refereras i den här artikeln använder SignalR Java-klienten.
Visa eller ladda ned exempelkod (hur du laddar ned)
Installera SignalR Java-klientpaketet
Med signalr-7.0.0 JAR-fil kan klienter ansluta till SignalR hubbar. Information om hur du hittar det senaste jar-filversionsnumret finns i Maven-sökresultatet.
Om du använder Gradle lägger du till följande rad i avsnittet dependencies
i filen build.gradle:
implementation 'com.microsoft.signalr:signalr:7.0.0'
Om du använder Maven lägger du till följande rader i <dependencies>
-elementet i filen pom.xml
:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Ansluta till en hubb
För att upprätta en HubConnection
ska HubConnectionBuilder
användas. Hubb-URL:en och loggnivån kan konfigureras när du skapar en anslutning. Konfigurera alla nödvändiga alternativ genom att anropa någon av de HubConnectionBuilder
metoderna innan build
. Starta anslutningen med start
.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
Anropa hubbmetoder från klienten
Ett anrop till send
anropar en hubbmetod. Skicka hubbmetodens namn och de argument som definierats i hubbmetoden till send
.
hubConnection.send("Send", input);
Not
Anrop av hubbmetoder från en klient stöds endast när man använder Azure SignalR-tjänsten i standardläge för. Mer information finns i Vanliga frågor och svar (GitHub-lagringsplats för azure-signalr).
Anropa klientmetoder från hubben
Använd hubConnection.on
för att definiera metoder på klienten som hubben kan anropa. Definiera metoderna efter att du har skapat men innan du startar anslutningen.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Lägg till loggning
SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging
med SignalR Java-klienten.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Om du inte konfigurerar loggning i dina beroenden läser SLF4J in en standardloggning utan åtgärd med följande varningsmeddelande:
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.
Detta kan ignoreras på ett säkert sätt.
Android-utvecklingsanteckningar
När det gäller Android SDK-kompatibilitet för SignalR-klientfunktioner bör du tänka på följande när du anger din Android SDK-målversion:
- Java-klienten SignalR körs på Android API-nivå 16 eller senare.
- Anslutning via Azure-tjänsten SignalR kräver Android API Nivå 20 eller senare eftersom Azure SignalR Service kräver TLS 1.2 och inte stöder SHA-1-baserade chiffersviter. Android har lagt till stöd för SHA-256 (och över) chiffersviter i API-nivå 20.
Konfigurera ägartokenautentisering
I SignalR Java-klienten kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en "åtkomsttokenfabrik" till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Skicka klassinformation i Java
När användarna anropar on
, invoke
eller stream
metoder för HubConnection
i Java-klienten bör de skicka ett Type
objekt i stället för ett Class<?>
objekt för att beskriva alla generiska Object
som skickas till metoden. En Type
kan hämtas med hjälp av den angivna TypeReference
-klassen. Om du till exempel använder en anpassad generisk klass med namnet Foo<T>
hämtar följande kod Type
:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
För icke-generiska objekt, till exempel primitiver eller andra icke-parametriserade typer som String
, kan du helt enkelt använda den inbyggda .class
.
När du anropar en av dessa metoder med en eller flera objekttyper använder du syntaxen generics när du anropar metoden. När du till exempel registrerar en on
-hanterare för en metod med namnet func
, som tar som argument en sträng och ett Foo<String>
-objekt, använder du följande kod för att ange en åtgärd för att skriva ut argumenten:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Den här konventionen är nödvändig eftersom vi inte kan hämta fullständig information om komplexa typer med Object.getClass
-metoden på grund av typ radering i Java. Om du till exempel anropar getClass
på en ArrayList<String>
returneras inte Class<ArrayList<String>>
, utan i stället Class<ArrayList>
, vilket inte ger deserialiseraren tillräckligt med information för att korrekt deserialisera ett inkommande meddelande. Detsamma gäller för anpassade objekt.
Kända begränsningar
- Transportåterställning och transport av skickade serverhändelser stöds inte.
- Transportåterställning och transport av skickade serverhändelser stöds inte.
- Endast JSON-protokollet stöds.
- Endast JSON-protokollet stöds.
- Endast WebSockets-transporten stöds.
- Direktuppspelning stöds inte än.
Ytterligare resurser
ASP.NET Core