Bagikan melalui


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 JAR signalr-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>

Koneksi 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 (repositori GitHub azure-signalr).

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:

Mengonfigurasi autentikasi token pembawa

SignalR Di klien Java, Anda dapat mengonfigurasi token pembawa untuk digunakan untuk autentikasi dengan menyediakan "pabrik token akses" ke HttpHub Koneksi ionBuilder. 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 . invokeHubConnectionon 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 getClassArrayList<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 ON yang JSdidukung.
  • Hanya protokol ON yang JSdidukung.
  • Hanya transportasi WebSocket yang didukung.
  • Streaming belum didukung.

Sumber Daya Tambahan: