Rumah  >  Artikel  >  Java  >  Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan

Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan

WBOY
WBOYke hadapan
2023-05-12 18:55:061504semak imbas

WebSocket ialah protokol untuk komunikasi dupleks penuh melalui sambungan TCP tunggal yang telah diseragamkan oleh W3C. Menggunakan WebSocket menjadikan pertukaran data antara pelanggan dan pelayan lebih mudah. Dalam protokol WebSocket, penyemak imbas dan pelayan hanya perlu melengkapkan jabat tangan, dan sambungan berterusan boleh dibuat terus antara keduanya untuk penghantaran data dua arah.

Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan

Ciri

  • WebSocket perlu membuat sambungan terlebih dahulu apabila menggunakannya, yang menjadikan Websocket stateful protokol, sebahagian daripada maklumat status (seperti pengesahan identiti, dll.) boleh ditinggalkan dalam proses komunikasi berikutnya.

  • Sambungan WebSocket dibuat pada port 80 (ws) atau 443 (wss), port yang sama yang digunakan oleh HTTP, jadi pada asasnya semua firewall tidak akan menyekat sambungan WebSocket.

  • WebSocket menggunakan protokol HTTP untuk berjabat tangan, jadi ia boleh disepadukan secara semula jadi ke dalam pelayar web dan pelayan HTTP tanpa kos tambahan.

  • Mesej degupan jantung (ping dan pong) akan dihantar berulang kali untuk memastikan sambungan WebSocket aktif.

  • Menggunakan protokol ini, kedua-dua pelayan dan pelanggan boleh mengetahui apabila mesej dimulakan atau tiba.

  • Mesej penutupan khas akan dihantar apabila sambungan WebSocket ditutup.

  • WebSocket menyokong domain silang dan boleh mengelakkan pengehadan Ajax.

  • Spesifikasi HTTP memerlukan pelayar mengehadkan bilangan sambungan serentak kepada dua sambungan bagi setiap nama hos, tetapi apabila kami menggunakan Websocket, apabila jabat tangan selesai, had ini tidak wujud, kerana sambungan pada masa ini bukan lagi sambungan HTTP.

  • Protokol WebSocket menyokong sambungan. Pengguna boleh melanjutkan protokol untuk melaksanakan beberapa sub-protokol tersuai.

  • WebSocket mempunyai sokongan binari yang lebih baik dan pemampatan yang lebih baik.

1 Tambah kebergantungan

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-websocket</artifactid>
</dependency>

2. Konfigurasikan WebSocket

Rangka kerja Spring menyediakan WebSocket. Sokongan STOMP, STOMP ialah protokol saling kendalian ringkas yang biasa digunakan untuk pemesejan tak segerak antara pelanggan melalui pelayan perantara.

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 设置消息代理的前缀,如果消息的前缀为"/topic",就会将消息转发给消息代理(broker)
        // 再由消息代理广播给当前连接的客户端
        config.enableSimpleBroker("/topic");
        // 下面方法可以配置一个或多个前缀,通过这些前缀过滤出需要被注解方法处理的消息。
        // 例如这里表示前缀为"/app"的destination可以通过@MessageMapping注解的方法处理
        // 而其他 destination(例如"/topic""/queue")将被直接交给 broker 处理
        config.setApplicationDestinationPrefixes("/app");
    }
 
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 定义一个前缀为"/chart"的endpoint,并开启 sockjs 支持。
        // sockjs 可以解决浏览器对WebSocket的兼容性问题,客户端将通过这里配置的URL建立WebSocket连接
        registry.addEndpoint("/chat").withSockJS();
    }
}

3. Kod pelayan

Menurut konfigurasi WebSocketConfig di atas, kaedah beranotasi @MessageMapping("/hello") akan digunakan untuk menerima "/app /hello" ” laluan, selepas memproses mesej dalam kaedah anotasi, mesej dimajukan ke laluan yang ditakrifkan oleh @SendTo. Laluan @SendTo ialah laluan yang diawali dengan "/topic", jadi mesej diserahkan kepada broker mesej, dan kemudian disiarkan oleh broker.

@Controller
public class DemoController {

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Message greeting(Message message) throws Exception {
        return message;
    }

}
rrree

4. Kod bahagian hadapan

Buat halaman chat.html dalam direktori sumber/statik sebagai halaman sembang.

@Data
public class Message {

    private String name;
    
    private String content;

}
  • SockJS ialah perpustakaan JavaScript pelayar yang menyediakan objek yang serupa dengan WebSocket. SockJS menyediakan anda dengan API Javascript penyemak imbas yang konsisten yang mencipta saluran komunikasi rentas domain kependaman rendah, dupleks penuh, antara penyemak imbas dan pelayan web.

  • STOMP bermaksud Simple (atau Streaming) Text Orientated Messaging Protocol Ia menyediakan format sambungan saling kendali yang membolehkan pelanggan STOMP berkomunikasi dengan mana-mana broker mesej STOMP (Broker) berinteraksi.

  • anotasi @SendTo, yang memajukan mesej yang diproses mengikut kaedah kepada broker, dan kemudian broker menyiarkan mesej tersebut.

5. Hasil pengesahan

Alamat permintaan kami: http://127.0.0.1:8086/chat.html

Pengguna log masuk: piao

Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan

Pengguna log masuk: admin

Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan

Atas ialah kandungan terperinci Bagaimana SpringBoot menggunakan WebSocket untuk menghantar mesej kumpulan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam