中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用 Spring Boot 實現 WebSocket實時通信

發布時間:2020-08-27 00:17:53 來源:腳本之家 閱讀:210 作者:Oopsguy 欄目:編程語言

在開發 Web 應用程序時,我們有時需要將服務端事件推送到連接的客戶端。但 HTTP 并不能做到。客戶端打開與服務端的連接并請求數據,但服務端不能打開與客戶端的連接并推送數據。

為了解決這個限制,我們可以建立了一個輪詢模式,網頁會間隔地輪詢服務器以獲取新事件。但這種模式不太理想,因為它增加了 HTTP 開銷,速度也只能達到與輪詢的速率一樣快,并且給服務器增加了不必要的負載。

幸運的是,HTML5 WebSocket 出現了。WebSocket 協議允許瀏覽器與 Web 服務器之間進行低開銷的交互。在文中,我們將介紹 Websockets API,并展示如何使用 Spring Boot 實現 Websockets。

HTML5 來救場!

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

WebSocket API 實際上很簡單。您只需要創建一個 WebSocket 對象,附加事件監聽器和發送消息即可。

以下是一個例子:

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 對 WebSockets 接口提供了很好的支持。

首先,我們需要創建一個類,繼承 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());
  }
}

接下來,我們需要配置 WebSocket 端點。

@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,您可以在大多數前端框架中它。包括 Angular,您可以在 TypeScript 中包含 JavaScript 代碼。

總結

是不是相當簡單?它解決了服務端和客戶端之間傳輸數據的一大困擾。Spring Boot 使它變得更加簡單。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延川县| 揭东县| 林甸县| 潍坊市| 吴川市| 广州市| 新郑市| 孟州市| 乌兰浩特市| 宁陵县| 久治县| 连城县| 阿拉善盟| 乌鲁木齐市| 衡山县| 剑阁县| 体育| 交口县| 大悟县| 云安县| 龙里县| 延边| 本溪| 冀州市| 定襄县| 沙河市| 安图县| 长治市| 囊谦县| 黄梅县| 库尔勒市| 南宁市| 德惠市| 高尔夫| 平定县| 富川| 扶沟县| 大化| 宿州市| 乌鲁木齐县| 祁东县|