klien ASP.NET Core SignalR Java
Oleh Mikael Mengistu
Klien Java memungkinkan koneksi ke server ASP.NET Core SignalR dari kode Java, termasuk aplikasi Android. Seperti klien JavaScript dan klien .NET, klien Java memungkinkan Anda untuk menerima dan mengirim pesan ke hub secara real time. Klien Java tersedia di ASP.NET Core 2.2 dan yang lebih baru.
Contoh aplikasi konsol Java yang dirujuk dalam artikel ini menggunakan SignalR klien Java.
Melihat atau mengunduh kode sampel (cara mengunduh)
SignalR Menginstal paket klien Java
File signalrJAR -7.0.0 memungkinkan klien untuk terhubung ke SignalR hub. Untuk menemukan nomor versi file JAR terbaru, lihat hasil pencarian Maven.
Jika menggunakan Gradle, tambahkan baris berikut ke bagian dependencies
file build.gradle Anda:
implementation 'com.microsoft.signalr:signalr:7.0.0'
Jika menggunakan Maven, tambahkan baris berikut di <dependencies>
dalam elemen file Anda pom.xml
:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Menyambungkan ke hub
Untuk menetapkan HubConnection
, harus HubConnectionBuilder
digunakan. URL hub dan tingkat log dapat dikonfigurasi saat membangun koneksi. Konfigurasikan opsi yang diperlukan dengan memanggil salah HubConnectionBuilder
satu metode sebelum build
. Mulai koneksi dengan start
.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
Metode hub panggilan dari klien
Panggilan untuk send
memanggil metode hub. Teruskan nama metode hub dan argumen apa pun yang ditentukan dalam metode hub ke send
.
hubConnection.send("Send", input);
Catatan
Metode hub panggilan dari klien hanya didukung saat menggunakan Layanan Azure SignalR dalam mode Default . Untuk informasi selengkapnya, lihat Tanya Jawab Umum (azure-signalr repositori GitHub).
Memanggil metode klien dari hub
Gunakan hubConnection.on
untuk menentukan metode pada klien yang dapat dipanggil hub. Tentukan metode setelah membangun tetapi sebelum memulai koneksi.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Tambah pembuatan log
Klien SignalR Java menggunakan pustaka SLF4J untuk pengelogan. Ini adalah API pengelogan tingkat tinggi yang memungkinkan pengguna pustaka untuk memilih implementasi pengelogan spesifik mereka sendiri dengan membawa dependensi pengelogan tertentu. Cuplikan kode berikut menunjukkan cara menggunakan java.util.logging
dengan SignalR klien Java.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Jika Anda tidak mengonfigurasi pengelogan dalam dependensi Anda, SLF4J memuat pencatat tanpa operasi default dengan pesan peringatan berikut:
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.
Ini dapat diabaikan dengan aman.
Catatan pengembangan Android
Sehubungan dengan kompatibilitas Android SDK untuk SignalR fitur klien, pertimbangkan item berikut saat menentukan versi Android SDK target Anda:
- SignalR Klien Java akan berjalan di Android API Level 16 dan yang lebih baru.
- Menyambungkan melalui Layanan Azure SignalR akan memerlukan Android API Level 20 dan yang lebih baru karena Layanan Azure SignalR memerlukan TLS 1.2 dan tidak mendukung suite sandi berbasis SHA-1. Android menambahkan dukungan untuk suite sandi SHA-256 (ke atas) di API Level 20.
Mengonfigurasi autentikasi token pembawa
SignalR Di klien Java, Anda dapat mengonfigurasi token pembawa untuk digunakan untuk autentikasi dengan menyediakan "pabrik token akses" ke HttpHubConnectionBuilder. Gunakan denganAccessTokenFactory untuk menyediakan String> Tunggal<RxJava. Dengan panggilan ke Single.defer, Anda dapat menulis logika untuk menghasilkan token akses untuk klien Anda.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Meneruskan informasi Kelas di Java
Saat memanggil metode , , atau stream
di klien Java, pengguna harus meneruskan Type
objek daripada Class<?>
objek untuk menggambarkan generik Object
apa pun yang diteruskan ke metode . invoke
HubConnection
on
Type
dapat diperoleh menggunakan kelas yang disediakanTypeReference
. Misalnya, menggunakan kelas generik kustom bernama Foo<T>
, kode berikut mendapatkan Type
:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
Untuk non-generik, seperti primitif atau jenis non-parameter lainnya seperti String
, Anda cukup menggunakan bawaan .class
.
Saat memanggil salah satu metode ini dengan satu atau beberapa jenis objek, gunakan sintaks generik saat memanggil metode . Misalnya, saat mendaftarkan on
handler untuk metode bernama func
, yang mengambil sebagai argumen String dan Foo<String>
objek, gunakan kode berikut untuk mengatur tindakan untuk mencetak argumen:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Konvensi ini diperlukan karena kami tidak dapat mengambil informasi lengkap tentang jenis kompleks dengan Object.getClass
metode karena penghapusan jenis di Java. Misalnya, memanggil getClass
ArrayList<String>
tidak akan mengembalikan Class<ArrayList<String>>
, melainkan Class<ArrayList>
, yang tidak memberikan informasi yang cukup kepada deserializer untuk mendeserialisasi pesan masuk dengan benar. Hal yang sama berlaku untuk objek kustom.
Pembatasan yang diketahui
- Fallback transportasi dan transportasi Peristiwa Terkirim Server tidak didukung.
- Fallback transportasi dan transportasi Peristiwa Terkirim Server tidak didukung.
- Hanya protokol JSON yang didukung.
- Hanya protokol JSON yang didukung.
- Hanya transportasi WebSocket yang didukung.
- Streaming belum didukung.
Sumber Daya Tambahan:
ASP.NET Core