目錄
什麼是Websocket,為什麼使用它們?
在Spring Boot中設置Websocket
1。添加依賴項
2。啟用Websocket
建立一個實時聊天示例
1。定義消息模型
2。創建一個消息控制器
3。帶JavaScript和Sockjs的前端
處理用戶和私人消息傳遞
生產考慮
替代方案和增強功能
首頁 Java java教程 使用Java和Websocket開發實時應用程序

使用Java和Websocket開發實時應用程序

Aug 16, 2025 am 11:10 AM

帶有Webockets的Java非常適合聊天應用等實時應用程序和實時儀表板,這是由於其全雙工,低延遲的通信; 1。使用Spring Boot的Spring-Websocket和Spring-Messgage設置Websocket; 2。通過@enableWebsocketMessageBroker配置Stomp端點和消息經紀人; 3.使用@messagemapping和@Sendto構建聊天示例,以供廣播消息; 4.使用SimpMessagingTemplate和用戶特定目的地實現私人消息; 5。通過管理連接,使用REDIS或RABBITMQ等消息經紀人來確保生產準備,並使用Spring Security確保端點以及使用SOCKJS後備; 6.考慮用於高規模場景的Netty或Eactive WebFlux等替代方案,但在大多數用例中依靠Spring Boot,以確保具有乾淨的消息合同的安全,可擴展的實時功能。

使用Java和Websocket開發實時應用程序

實時應用程序(例如聊天應用程序,實時儀表板和協作工具)在客戶和服務器之間進行即時數據交換。 Java憑藉其強大的生態系統和對Websocket的支持,是構建此類應用程序的可靠選擇。這是使用Java和Websocket有效開發實時功能的方法。

使用Java和Websocket開發實時應用程序

什麼是Websocket,為什麼使用它們?

HTTP基於請求響應,這意味著客戶端必須向服務器詢問更新。這對實時需求不佳。 WebSockets提供了客戶和服務器之間的全雙工,持久的連接,使雙方都可以隨時發送數據。

與投票或服務器量事件(SSE)相比,Websockets提供:

使用Java和Websocket開發實時應用程序
  • 較低的延遲
  • 降低開銷(沒有重複的HTTP標頭)
  • 雙向交流

Java EE(現為Jakarta EE)和Spring Boot都提供了強大的Websocket支持,從而更容易集成到企業應用程序中。


在Spring Boot中設置Websocket

Spring Boot通過spring-websocketspring-messaging簡化了Websocket的開發。這是一個最小的設置:

使用Java和Websocket開發實時應用程序

1。添加依賴項

<依賴項>
    <groupId> org.springframework.boot </groupId>
    <Artifactid> Spring-Boot-Starter-Websocket </artifactid>
</dependency>

2。啟用Websocket

創建一個配置類:

 @配置
@enableWebsocketMessageBroker
公共類WebSocketConfig實現WebSocketMessageMeskageBrokerConfigurer {

    @Override
    public void RegisterStompendPoints(StompendPoinTregistry登記冊){
        registry.addendpoint(“/ws”)。 withsockjs(); //踩在websocket上
    }

    @Override
    public void configuremessageBroker(MessageBrokerRegistry註冊表){
        registry.enablesimpleBroker(“/topic”); //用於廣播
        registry.setApplicationDestinationPreFixes(“/app”); //用於應用程序特定消息
    }
}

此配置:

  • 公開/ws處的WebSocket端點
  • 使用sockjs作為較舊瀏覽器的後備
  • 為主題設置一個簡單的消息經紀

建立一個實時聊天示例

讓我們創建一個簡單的聊天應用程序來演示實時消息傳遞。

1。定義消息模型

公共班級chatmessage {
    私有字符串內容;
    私人字符串發件人;
    //構造函數,getters,setters
}

2。創建一個消息控制器

@控制器
公共類ChatController {

    @messagemapping(“/chat.send”)
    @Sendto(“/topel/public”)
    公共chatmessage send(chatmessage message){
        返回消息;
    }
}
  • @MessageMapping處理客戶的傳入踩踏消息
  • @SendTo向所有/topic/public訂閱者廣播響應

3。帶JavaScript和Sockjs的前端

<script src =“ https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js”> </script>
<script src =“ https://cdn.jsdelivr.net/npm/stompjs@2.3.3.3/lib/stomp.min.js”> </script>

<script>
    const插座= new Sockjs(&#39;/ws&#39;);
    const stompclient = Stomp.over(套接字);

    stompclient.connect({},function(){
        stompclient.subscribe(&#39;/topic/public&#39;,function(message){
            const chatmessage = json.parse(message.body);
            console.log(chatmessage.sender”:“ chatmessage.content);
        });
    });

    //發送消息
    函數sendmessage(){
        stompclient.send(“/app/chat.send”,{},json.stringify({{
            “發件人”:“愛麗絲”,
            &#39;content&#39;:&#39;你好! &#39;
        }));
    }
</script>

這連接到Websocket,訂閱以聊天更新,然後將消息發送回服務器。


處理用戶和私人消息傳遞

對於私人消息或特定用戶的更新,您可以:

  • 使用基於用戶的目的地,例如/user/queue/private
  • 通過Spring Security身份驗證Websocket會話
  • 使用SimpMessagingTemplate向特定用戶發送消息

例子:

 @Autowired
私有simpMessagingTemplate MessagingTemplate;

public void sendprivatemessage(字符串userId,chatmessage消息){
    MessagingTemplate.ConvertandSendTouser(userId,“/queue/private”,消息);
}

客戶將訂閱/user/queue/private以接收個人消息。


生產考慮

當Websocket運行良好時,擴展實時應用需要注意:

  • 連接管理:跟踪主動會議並清理斷開連接
  • 可擴展性:使用諸如RabbitMQ或Redis之類的消息經紀人進行聚類
  • 安全:驗證消息,驗證用戶並防止垃圾郵件
  • 後備:SOCKJS會有所幫助,但測試較舊的瀏覽器支持
  • 監視:日誌連接事件和消息吞吐量

另外,請考慮使用反應性堆棧(如Spring Webflux),以在高並發狀態下更好地可擴展性。


替代方案和增強功能

對於高性能或大型系統,請考慮:

  • Netty :自定義WebSocket服務器的低級框架
  • Quarkus或Micronaut :帶有WebSocket的輕型Java框架
  • REDIS PUB/SUB :用於跨服務的解耦消息分佈

但是對於大多數實時的Web應用程序,Spring Boot Websockets就足夠了。


一旦您了解流程,在使用Websocket的Java中開發實時應用程序就不會變得複雜。有了春季的抽象,您可以在數小時內從想法到工作原型。關鍵是設計乾淨的消息合同和規模提前計劃。

基本上,在春季堅持踩在網站上,使用適當的主題和用戶目的地,並始終確保您的端點。那會讓您90%。

以上是使用Java和Websocket開發實時應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1596
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執行多個操作,最後根據結果提交或回滾;1.調用conn.setAutoCommit(false)以開始事務;2.執行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調用conn.commit(),若發生異常則調用conn.rollback()確保數據一致性;同時應使用try-with-resources管理資源,妥善處理異常並關閉連接,避免連接洩漏;此外建議使用連接池、設置保存點實現部分回滾,並保持事務盡可能短以提升性能。

用雅加達EE在Java建立靜止的API 用雅加達EE在Java建立靜止的API Jul 30, 2025 am 03:05 AM

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區;6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現代Java中日期處理應優先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

Java性能優化和分析技術 Java性能優化和分析技術 Jul 31, 2025 am 03:58 AM

使用性能分析工具定位瓶頸,開發測試階段用VisualVM或JProfiler,生產環境優先Async-Profiler;2.減少對象創建,復用對象、用StringBuilder替代字符串拼接、選擇合適GC策略;3.優化集合使用,根據場景選型並預設初始容量;4.優化並發,使用並發集合、減少鎖粒度、合理設置線程池;5.調優JVM參數,設置合理堆大小和低延遲垃圾回收器並啟用GC日誌;6.代碼層面避免反射、用基本類型替代包裝類、延遲初始化、使用final和static;7.持續性能測試與監控,結合JMH

Java項目管理Maven的開發人員指南 Java項目管理Maven的開發人員指南 Jul 30, 2025 am 02:41 AM

Maven是Java項目管理和構建的標準工具,答案在於它通過pom.xml實現項目結構標準化、依賴管理、構建生命週期自動化和插件擴展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與衝突;4.通過多模塊項目結構組織大型應用並由父POM統一管理;5.配

了解Java虛擬機(JVM)內部 了解Java虛擬機(JVM)內部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

See all articles