ASP.NET Core SignalR Java istemcisi
Tarafından Mikael Mengistu
Java istemcisi, Android uygulamaları da dahil olmak üzere Java kodundan bir ASP.NET Core SignalR sunucusuna bağlanmayı etkinleştirir. JavaScript istemcisi ve .NET istemcisi gibi Java istemcisi de bir hub'a gerçek zamanlı olarak ileti almanızı ve göndermenizi sağlar. Java istemcisi ASP.NET Core 2.2 ve sonraki sürümlerde kullanılabilir.
Bu makalede başvuruda bulunan örnek Java konsol uygulaması Java istemcisini SignalR kullanır.
Örnek kodu görüntüleme veya indirme (indirme)
SignalR Java istemci paketini yükleme
signalr-7.0.0 JAR dosyası istemcilerin hub'lara bağlanmasına SignalR olanak tanır. En son JAR dosyası sürüm numarasını bulmak için Maven arama sonuçlarına bakın.
Gradle kullanıyorsanız build.gradle dosyanızın bölümüne aşağıdaki satırı dependencies
ekleyin:
implementation 'com.microsoft.signalr:signalr:7.0.0'
Maven kullanıyorsanız, dosyanızın pom.xml
öğesinin <dependencies>
içine aşağıdaki satırları ekleyin:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Hub'a bağlanma
oluşturmak HubConnection
HubConnectionBuilder
için , kullanılmalıdır. Bağlantı oluşturulurken hub URL'si ve günlük düzeyi yapılandırılabilir. önce yöntemlerinden build
herhangi birini HubConnectionBuilder
çağırarak gerekli seçenekleri yapılandırın. ile start
bağlantıyı başlatın.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
İstemciden çağrı hub'ı yöntemleri
Bir hub yöntemini çağırma çağrısı send
. Hub yöntemi adını ve hub yönteminde tanımlanan tüm bağımsız değişkenleri öğesine send
geçirin.
hubConnection.send("Send", input);
Not
İstemciden hub yöntemlerini çağırmak yalnızca Azure SignalR Hizmeti Varsayılan modda kullanılırken desteklenir. Daha fazla bilgi için bkz . Sık Sorulan Sorular (azure-signalr GitHub deposu).
Hub'dan istemci yöntemlerini çağırma
İstemcide hub'ın çağırabileceği yöntemleri tanımlamak için kullanın hubConnection.on
. Derlemeden sonra ancak bağlantıyı başlatmadan önce yöntemleri tanımlayın.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Günlüğe kaydetme işlevi ekleme
SignalR Java istemcisi günlük kaydı için SLF4J kitaplığını kullanır. Bu, kitaplık kullanıcılarının belirli bir günlük bağımlılığını getirerek kendi özel günlük uygulamalarını seçmelerine olanak tanıyan üst düzey bir günlük API'sidir. Aşağıdaki kod parçacığında Java istemcisiyle SignalR nasıl kullanılacağı java.util.logging
gösterilmektedir.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Bağımlılıklarınızda günlüğe kaydetmeyi yapılandırmazsanız, SLF4J aşağıdaki uyarı iletisiyle varsayılan bir işlemsiz günlükçü yükler:
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.
Bu, güvenli bir şekilde yoksayılabilir.
Android geliştirme notları
İstemci özellikleri için SignalR Android SDK uyumluluğuyla ilgili olarak, hedef Android SDK sürümünüzü belirtirken aşağıdaki öğeleri göz önünde bulundurun:
- SignalR Java İstemcisi, Android API Düzey 16 ve sonraki sürümlerde çalışır.
- Azure SignalR Hizmeti TLS 1.2 gerektirdiğinden ve SHA-1 tabanlı şifreleme paketlerini desteklemediğinden Azure SignalR Hizmeti aracılığıyla bağlanmak için Android API Düzeyi 20 ve üzeri gerekir. Android , API Düzey 20'de SHA-256 (ve üzeri) şifreleme paketleri için destek ekledi.
Taşıyıcı belirteci kimlik doğrulamayı yapılandırma
Java istemcisindeSignalR, HttpHubConnectionBuilder'a "erişim belirteci fabrikası" sağlayarak kimlik doğrulaması için kullanılacak taşıyıcı belirteci yapılandırabilirsiniz. RxJava Tek Dizesini> sağlamak içinAccessTokenFactory ile kullanın.< Single.defer çağrısıyla, istemciniz için erişim belirteçleri oluşturmak üzere mantık yazabilirsiniz.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Java'da Sınıf bilgilerini geçirme
Java istemcisinde , veya yöntemlerini çağırırkenon
, kullanıcılar yönteme geçirilen genel Object
bir nesneyi tanımlamak için nesne yerine bir Class<?>
nesne geçirmelidirType
.HubConnection
stream
invoke
sağlanan Type
sınıf kullanılarak TypeReference
A elde edilebilir. Örneğin, adlı Foo<T>
özel bir genel sınıf kullanıldığında aşağıdaki kod şu kodu Type
alır:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
Temel öğeler veya gibi diğer parametrelenmemiş türler gibi genel olmayan türler için String
yerleşik .class
kullanabilirsiniz.
Bu yöntemlerden birini bir veya daha fazla nesne türüyle çağırırken, yöntemini çağırırken generics söz dizimini kullanın. Örneğin, bir Dize ve Foo<String>
nesne bağımsız değişken olarak alan adlı func
bir yöntem için bir işleyici kaydederkenon
, bağımsız değişkenleri yazdırmak üzere bir eylem ayarlamak için aşağıdaki kodu kullanın:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Java'da tür silme nedeniyle yöntemiyle Object.getClass
karmaşık türler hakkında tam bilgi alamadığımız için bu kural gereklidir. Örneğin, üzerinde çağrısı getClass
yapmak, Class<ArrayList>
gelen iletiyi düzgün bir şekilde seri durumdan çıkarmak için seri durumdan çıkarıcıya yeterli bilgi vermeyen değerini döndürmezClass<ArrayList<String>>
.ArrayList<String>
Aynı durum özel nesneler için de geçerlidir.
Bilinen sınırlamalar
- Aktarım geri dönüşü ve Sunucu Tarafından Gönderilen Olaylar aktarımı desteklenmez.
- Aktarım geri dönüşü ve Sunucu Tarafından Gönderilen Olaylar aktarımı desteklenmez.
- Yalnızca JSON protokolü desteklenir.
- Yalnızca JSON protokolü desteklenir.
- Yalnızca WebSockets aktarımı desteklenir.
- Akış henüz desteklenmiyor.
Ek kaynaklar
ASP.NET Core