最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中實(shí)現(xiàn)WebSocket方法詳解

 更新時(shí)間:2023年07月19日 08:37:07   作者:硬件人某某某  
這篇文章主要介紹了Java中實(shí)現(xiàn)WebSocket方法詳解,WebSocket?是一種新型的網(wǎng)絡(luò)協(xié)議,它允許客戶端和服務(wù)器之間進(jìn)行雙向通信,可以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)交互,需要的朋友可以參考下

WebSocket 簡(jiǎn)介

WebSocket 是一種新型的網(wǎng)絡(luò)協(xié)議,它允許客戶端和服務(wù)器之間進(jìn)行雙向通信,可以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)交互。

WebSocket 協(xié)議是基于 HTTP 協(xié)議的,使用標(biāo)準(zhǔn)的 TCP 連接,可以在客戶端和服務(wù)器之間建立一條持久化的連接,而不需要像 HTTP 協(xié)議那樣每次請(qǐng)求都需要重新建立連接。

WebSocket 協(xié)議的優(yōu)點(diǎn)包括:

  • 實(shí)時(shí)性:WebSocket 協(xié)議可以在客戶端和服務(wù)器之間實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)交互。
  • 性能:WebSocket 協(xié)議使用標(biāo)準(zhǔn)的 TCP 連接,可以在客戶端和服務(wù)器之間建立一條持久化的連接,不需要像 HTTP 協(xié)議那樣每次請(qǐng)求都需要重新建立連接。這可以提高網(wǎng)絡(luò)性能,并減少網(wǎng)絡(luò)帶寬的消耗。
  • 跨域支持:WebSocket 協(xié)議支持跨域請(qǐng)求,可以在不同的域名之間進(jìn)行數(shù)據(jù)交互。

Java 中的 WebSocket 實(shí)現(xiàn)

Java 中的 WebSocket 實(shí)現(xiàn)主要是通過 JSR 356 規(guī)范來(lái)實(shí)現(xiàn)的,該規(guī)范定義了 Java 中的 WebSocket API,包括客戶端和服務(wù)端兩部分。

WebSocket 客戶端

Java 中的 WebSocket 客戶端可以通過 javax.websocket 包中的 Session 類來(lái)實(shí)現(xiàn)。

以下是一個(gè)簡(jiǎn)單的 WebSocket 客戶端示例代碼:

@ClientEndpoint
public class MyClient {
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("連接成功");
    }
    @OnMessage
    public void onMessage(String message) {
        System.out.println("收到消息:" + message);
    }
    @OnClose
    public void onClose() {
        System.out.println("連接關(guān)閉");
    }
    public static void main(String[] args) throws Exception {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        Session session = container.connectToServer(MyClient.class, URI.create("ws://localhost:8080/websocket"));
        session.getBasicRemote().sendText("Hello, WebSocket");
    }
}

上面的代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 WebSocket 客戶端,使用 @ClientEndpoint 注解來(lái)標(biāo)識(shí)該類是一個(gè) WebSocket 客戶端,使用 @OnOpen@OnMessage@OnClose 注解來(lái)定義客戶端的行為。

可以使用 WebSocketContainer 類來(lái)創(chuàng)建一個(gè) WebSocket 客戶端,并使用 Session 類來(lái)操作連接。

WebSocket 服務(wù)端

Java 中的 WebSocket 服務(wù)端可以通過 javax.websocket 包中的 Endpoint 類來(lái)實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的 WebSocket 服務(wù)端示例代碼:

@ServerEndpoint("/websocket")
public class MyServer {
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("連接成功");
    }
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("收到消息:" + message);
        session.getBasicRemote().sendText("你好,客戶端");
    }
    @OnClose
    public void onClose() {
        System.out.println("連接關(guān)閉");
    }
    public static void main(String[] args) throws Exception {
        ServerEndpointConfig config = ServerEndpointConfig.Builder.create(MyServer.class, "/websocket").build();
        WebSocketServerContainer container = (WebSocketServerContainer) ContainerProvider.getWebSocketContainer();
        container.addEndpoint(config);
        System.out.println("服務(wù)端啟動(dòng)成功");
        Thread.currentThread().join();
    }
}

上面的代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 WebSocket 服務(wù)端,使用 @ServerEndpoint 注解來(lái)標(biāo)識(shí)該類是一個(gè) WebSocket 服務(wù)端,使用 @OnOpen@OnMessage@OnClose 注解來(lái)定義服務(wù)端的行為??梢允褂?WebSocketServerContainer 類來(lái)創(chuàng)建一個(gè) WebSocket 服務(wù)端,并使用 ServerEndpointConfig 類來(lái)配置服務(wù)端的連接。

WebSocket 實(shí)現(xiàn)示例

下面是一個(gè)完整的 WebSocket 實(shí)現(xiàn)示例,包括客戶端和服務(wù)端。該示例實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的聊天室,客戶端可以向服務(wù)端發(fā)送消息,并將消息廣播給所有在線用戶。

服務(wù)端```java

@ServerEndpoint(“/chat”) 
public class ChatServer { 
private static final Set sessions = Collections.synchronizedSet(new HashSet<>());
@OnOpen
public void onOpen(Session session) {
    System.out.println("新用戶加入");
    sessions.add(session);
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
    System.out.println("收到消息:" + message);
    broadcast(message);
}
@OnClose
public void onClose(Session session) {
    System.out.println("用戶離開");
    sessions.remove(session);
}
private void broadcast(String message) throws IOException {
    for (Session session : sessions) {
        session.getBasicRemote().sendText(message);
    }
}
public static void main(String[] args) throws Exception {
    ServerEndpointConfig config = ServerEndpointConfig.Builder.create(ChatServer.class, "/chat").build();
    WebSocketServerContainer container = (WebSocketServerContainer) ContainerProvider.getWebSocketContainer();
    container.addEndpoint(config);
    System.out.println("聊天室已啟動(dòng)");
    Thread.currentThread().join();
    }
}

上面的代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的聊天室,使用 `@ServerEndpoint` 注解來(lái)標(biāo)識(shí)該類是一個(gè) WebSocket 服務(wù)端,使用 `@OnOpen`、`@OnMessage` 和 `@OnClose` 注解來(lái)定義服務(wù)端的行為。在 `onOpen` 方法中,將新用戶加入到 `sessions` 集合中,表示該用戶已經(jīng)加入聊天室。在 `onMessage` 方法中,將收到的消息廣播給所有在線用戶。在 `onClose` 方法中,將離開的用戶從 `sessions` 集合中移除,表示該用戶已經(jīng)離開聊天室。在 `broadcast` 方法中,將消息廣播給所有在線用戶。
### 客戶端

@ClientEndpoint
public class ChatClient {
    private static final String SERVER_URL = "ws://localhost:8080/chat";
    private static final Scanner scanner = new Scanner(System.in);
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("連接成功");
    }
    @OnMessage
    public void onMessage(String message) {
        System.out.println("收到消息:" + message);
    }
    @OnClose
    public void onClose() {
        System.out.println("連接關(guān)閉");
    }
    public static void main(String[] args) throws Exception {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        Session session = container.connectToServer(ChatClient.class, URI.create(SERVER_URL));
        System.out.print("請(qǐng)輸入您的昵稱:");
        String nickname = scanner.nextLine();
        while (true) {
            System.out.print("[" + nickname + "]: ");
            String message = scanner.nextLine();
            session.getBasicRemote().sendText("[" + nickname + "]: " + message);
        }
    }
}

上面的代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的聊天室客戶端,使用 @ClientEndpoint 注解來(lái)標(biāo)識(shí)該類是一個(gè) WebSocket 客戶端,使用 @OnOpen、@OnMessage@OnClose 注解來(lái)定義客戶端的行為。在 onOpen 方法中,表示連接成功。

onMessage 方法中,將收到的消息打印到控制臺(tái)。在 onClose 方法中,表示連接關(guān)閉。在 main 方法中,使用 WebSocketContainer 類來(lái)創(chuàng)建一個(gè) WebSocket 客戶端,并使用 Session 類來(lái)操作連接。用戶需要輸入昵稱,并通過控制臺(tái)輸入消息發(fā)送給服務(wù)端。

總結(jié)

本文介紹了 WebSocket 協(xié)議的基本概念和 Java 中的 WebSocket 實(shí)現(xiàn)方式。通過示例代碼,演示了如何在 Java 中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的聊天室,包括服務(wù)端和客戶端。

WebSocket 協(xié)議具有實(shí)時(shí)性、性能和跨域支持等優(yōu)勢(shì),在實(shí)時(shí)數(shù)據(jù)交互的場(chǎng)景中得到廣泛應(yīng)用。

到此這篇關(guān)于Java中實(shí)現(xiàn)WebSocket方法詳解的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)WebSocket內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot配置多數(shù)據(jù)源代碼實(shí)例

    Spring boot配置多數(shù)據(jù)源代碼實(shí)例

    這篇文章主要介紹了Spring boot配置多數(shù)據(jù)源代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • MyBatis核心概念?+?環(huán)境搭建?+?CRUD實(shí)戰(zhàn)詳解

    MyBatis核心概念?+?環(huán)境搭建?+?CRUD實(shí)戰(zhàn)詳解

    文章主要介紹了MyBatis的核心知識(shí),從JDBC痛點(diǎn)開始,闡述了MyBatis的優(yōu)勢(shì),包括連接池管理、SQL與Java代碼解耦、自動(dòng)結(jié)果集映射、參數(shù)自動(dòng)映射等,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間

    Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間

    這篇文章主要介紹了Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Java中的RocketMQ消費(fèi)冪等詳解

    Java中的RocketMQ消費(fèi)冪等詳解

    這篇文章主要介紹了Java中的RocketMQ消費(fèi)冪等詳解,當(dāng)出現(xiàn)消費(fèi)者對(duì)某條消息重復(fù)消費(fèi)的情況時(shí),重復(fù)消費(fèi)的結(jié)果與消費(fèi)一次的結(jié)果是相同的,并且多次消費(fèi)并未對(duì)業(yè)務(wù)系統(tǒng)業(yè)務(wù)產(chǎn)生任何負(fù)面影響,那么這個(gè)消費(fèi)過程就是消息冪等,需要的朋友可以參考下
    2023-10-10
  • JavaCV簡(jiǎn)介與環(huán)境搭建詳細(xì)步驟

    JavaCV簡(jiǎn)介與環(huán)境搭建詳細(xì)步驟

    JavaCV是一個(gè)開源的Java接口,它為幾個(gè)著名的計(jì)算機(jī)視覺庫(kù)(如OpenCV、FFmpeg)提供了Java封裝,這篇文章主要給大家介紹了關(guān)于JavaCV簡(jiǎn)介與環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問題及解決

    maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問題及解決

    這篇文章主要介紹了maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn)

    k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn)

    本文主要介紹了k8s+springboot+CronJob定時(shí)任務(wù)部署實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java判斷用戶名和密碼是否符合要求過程詳解

    Java判斷用戶名和密碼是否符合要求過程詳解

    這篇文章主要介紹了Java判斷用戶名和密碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 你知道Spring中為何不建議使用字段注入嗎

    你知道Spring中為何不建議使用字段注入嗎

    這篇文章主要給大家介紹了關(guān)于Spring中為何不建議使用字段注入的相關(guān)資料,通過本文你將對(duì)Spring的引入方式有更一步的了解,需要的朋友可以參考下
    2021-08-08
  • mybatis利用association或collection傳遞多參數(shù)子查詢

    mybatis利用association或collection傳遞多參數(shù)子查詢

    今天小編就為大家分享一篇關(guān)于mybatis利用association或collection傳遞多參數(shù)子查詢,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03

最新評(píng)論

九寨沟县| 曲周县| 富源县| 绥滨县| 微山县| 洪泽县| 汪清县| 隆德县| 田阳县| 玛多县| 衡东县| 黄浦区| 宜阳县| 望谟县| 湘阴县| 巫溪县| 缙云县| 塔河县| 永昌县| 奇台县| 昌吉市| 祁东县| 木里| 邹平县| 汤阴县| 喜德县| 韶关市| 临湘市| 永仁县| 金寨县| 百色市| 辽宁省| 临夏市| 长阳| 闻喜县| 泾阳县| 安平县| 修武县| 南京市| 读书| 普兰店市|