欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用 Spring Boot 實(shí)現(xiàn) WebSocket實(shí)時(shí)通信

 更新時(shí)間:2017年10月31日 09:43:57   作者:Oopsguy  
本篇文章主要介紹了使用 Spring Boot 實(shí)現(xiàn) WebSocket實(shí)時(shí)通信,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在開(kāi)發(fā) Web 應(yīng)用程序時(shí),我們有時(shí)需要將服務(wù)端事件推送到連接的客戶端。但 HTTP 并不能做到??蛻舳舜蜷_(kāi)與服務(wù)端的連接并請(qǐng)求數(shù)據(jù),但服務(wù)端不能打開(kāi)與客戶端的連接并推送數(shù)據(jù)。

為了解決這個(gè)限制,我們可以建立了一個(gè)輪詢模式,網(wǎng)頁(yè)會(huì)間隔地輪詢服務(wù)器以獲取新事件。但這種模式不太理想,因?yàn)樗黾恿?HTTP 開(kāi)銷,速度也只能達(dá)到與輪詢的速率一樣快,并且給服務(wù)器增加了不必要的負(fù)載。

幸運(yùn)的是,HTML5 WebSocket 出現(xiàn)了。WebSocket 協(xié)議允許瀏覽器與 Web 服務(wù)器之間進(jìn)行低開(kāi)銷的交互。在文中,我們將介紹 Websockets API,并展示如何使用 Spring Boot 實(shí)現(xiàn) Websockets。

HTML5 來(lái)救場(chǎng)!

WebSockets 通過(guò)瀏覽器和服務(wù)器之間的單連接提供全雙工通信。它不存在 HTTP 開(kāi)銷,并且允許服務(wù)器將消息實(shí)時(shí)推送到客戶端。

WebSocket API 實(shí)際上很簡(jiǎn)單。您只需要?jiǎng)?chuàng)建一個(gè) WebSocket 對(duì)象,附加事件監(jiān)聽(tīng)器和發(fā)送消息即可。

以下是一個(gè)例子:

var socket = new WebSocket('ws://' + window.location.host + '/my-websocket-endpoint');
 
// Add an event listener for when a connection is open
socket.onopen = function() {
 console.log('WebSocket connection opened. Ready to send messages.');
 
 // Send a message to the server
 socket.send('Hello, from WebSocket client!');
};
 
// Add an event listener for when a message is received from the server
socket.onmessage = function(message) {
 console.log('Message received from server: ' + message);
};

Spring Boot

Spring 對(duì) WebSockets 接口提供了很好的支持。

首先,我們需要?jiǎng)?chuàng)建一個(gè)類,繼承 Spring 的 TextWebSocketHandler 類。

public class MyMessageHandler extends TextWebSocketHandler {
 
  @Override
  public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
    // The WebSocket has been closed
  }
 
  @Override
  public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    // The WebSocket has been opened
    // I might save this session object so that I can send messages to it outside of this method
 
    // Let's send the first message
    session.sendMessage(new TextMessage("You are now connected to the server. This is the first message."));
  }
 
  @Override
  protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception {
    // A message has been received
    System.out.println("Message received: " + textMessage.getPayload());
  }
}

接下來(lái),我們需要配置 WebSocket 端點(diǎn)。

@Configuration
@EnableWebSocket
public class WebsocketConfig implements WebSocketConfigurer {
 
  @Bean
  public WebSocketHandler myMessageHandler() {
    return new MyMessageHandler();
  }
 
  @Override
  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(myMessageHandler(), "/my-websocket-endpoint");
  }
 
}

由于 WebSockets API 是純 JavaScript,您可以在大多數(shù)前端框架中它。包括 Angular,您可以在 TypeScript 中包含 JavaScript 代碼。

總結(jié)

是不是相當(dāng)簡(jiǎn)單?它解決了服務(wù)端和客戶端之間傳輸數(shù)據(jù)的一大困擾。Spring Boot 使它變得更加簡(jiǎn)單。

原文鏈接:https://keyholesoftware.com/2017/04/10/websockets-with-spring-boot/
作者:THOMAS KENDALL
譯者:oopsguy.com

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Lombok之@AllArgsConstructor的使用方式

    Lombok之@AllArgsConstructor的使用方式

    這篇文章主要介紹了Lombok之@AllArgsConstructor的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo

    解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo

    這篇文章主要介紹了解決dubbo啟動(dòng)報(bào)服務(wù)注冊(cè)失敗Failed?to?register?dubbo問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的時(shí)間日期API知識(shí)點(diǎn)總結(jié)

    Java中的時(shí)間日期API知識(shí)點(diǎn)總結(jié)

    本文給大家總結(jié)了Java中的時(shí)間日期API知識(shí)點(diǎn)以及相關(guān)的實(shí)例代碼分享,有興趣的朋友參考學(xué)習(xí)下。
    2018-04-04
  • java8中的HashMap原理詳解

    java8中的HashMap原理詳解

    這篇文章主要介紹了java8中的HashMap原理詳解,HashMap是日常開(kāi)發(fā)中非常常用的容器,HashMap實(shí)現(xiàn)了Map接口,底層的實(shí)現(xiàn)原理是哈希表,HashMap不是一個(gè)線程安全的容器,需要的朋友可以參考下
    2023-09-09
  • java泛型學(xué)習(xí)示例

    java泛型學(xué)習(xí)示例

    Java泛型(Generics)是JDK5開(kāi)始引入的一個(gè)新特性,允許在定義類和接口的時(shí)候使用類型參數(shù)(Type Parameter)。下面是學(xué)習(xí)泛型的示例
    2014-04-04
  • Eclipse添加servlet模板過(guò)程代碼詳解

    Eclipse添加servlet模板過(guò)程代碼詳解

    這篇文章主要介紹了Eclipse添加servlet模板過(guò)程代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java的注解原理詳解

    Java的注解原理詳解

    這篇文章主要介紹了Java的注解原理詳解,注解是JDK1.5引入的新特性,包含在java.lang.annotation包中,它是附加在代碼中的一些元信息,將一個(gè)類的外部信息與內(nèi)部成員聯(lián)系起來(lái),在編 譯、運(yùn)行時(shí)進(jìn)行解析和使用,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)雙鏈表的示例代碼

    Java實(shí)現(xiàn)雙鏈表的示例代碼

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。本文將用Java語(yǔ)言實(shí)現(xiàn)雙鏈表,需要的可以參考一下
    2022-09-09
  • Maven如何構(gòu)建可執(zhí)行的jar包(包含依賴jar包)

    Maven如何構(gòu)建可執(zhí)行的jar包(包含依賴jar包)

    這篇文章主要介紹了Maven如何構(gòu)建可執(zhí)行的jar包(包含依賴jar包) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • idea常用習(xí)慣操作設(shè)置方法圖解

    idea常用習(xí)慣操作設(shè)置方法圖解

    這篇文章主要介紹了idea常用習(xí)慣操作設(shè)置方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論