Java中实现WebSocket方法详解

 更新时间:2023年07月19日 08:37:07   作者:硬件人某某某  
这篇文章主要介绍了Java中实现WebSocket方法详解,WebSocket 是一种新型的网络协议,它允许客户端和服务器之间进行双向通信,可以实现实时数据交互,需要的朋友可以参考下

WebSocket 简介

WebSocket 是一种新型的网络协议,它允许客户端和服务器之间进行双向通信,可以实现实时数据交互。

WebSocket 协议是基于 HTTP 协议的,使用标准的 TCP 连接,可以在客户端和服务器之间建立一条持久化的连接,而不需要像 HTTP 协议那样每次请求都需要重新建立连接。

WebSocket 协议的优点包括:

  • 实时性:WebSocket 协议可以在客户端和服务器之间实现实时数据交互。
  • 性能:WebSocket 协议使用标准的 TCP 连接,可以在客户端和服务器之间建立一条持久化的连接,不需要像 HTTP 协议那样每次请求都需要重新建立连接。这可以提高网络性能,并减少网络带宽的消耗。
  • 跨域支持:WebSocket 协议支持跨域请求,可以在不同的域名之间进行数据交互。

Java 中的 WebSocket 实现

Java 中的 WebSocket 实现主要是通过 JSR 356 规范来实现的,该规范定义了 Java 中的 WebSocket API,包括客户端和服务端两部分。

WebSocket 客户端

Java 中的 WebSocket 客户端可以通过 javax.websocket 包中的 Session 类来实现。

以下是一个简单的 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("连接关闭");
    }
    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");
    }
}

上面的代码实现了一个简单的 WebSocket 客户端,使用 @ClientEndpoint 注解来标识该类是一个 WebSocket 客户端,使用 @OnOpen@OnMessage@OnClose 注解来定义客户端的行为。

可以使用 WebSocketContainer 类来创建一个 WebSocket 客户端,并使用 Session 类来操作连接。

WebSocket 服务端

Java 中的 WebSocket 服务端可以通过 javax.websocket 包中的 Endpoint 类来实现。以下是一个简单的 WebSocket 服务端示例代码:

@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("连接关闭");
    }
    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("服务端启动成功");
        Thread.currentThread().join();
    }
}

上面的代码实现了一个简单的 WebSocket 服务端,使用 @ServerEndpoint 注解来标识该类是一个 WebSocket 服务端,使用 @OnOpen@OnMessage@OnClose 注解来定义服务端的行为。可以使用 WebSocketServerContainer 类来创建一个 WebSocket 服务端,并使用 ServerEndpointConfig 类来配置服务端的连接。

WebSocket 实现示例

下面是一个完整的 WebSocket 实现示例,包括客户端和服务端。该示例实现了一个简单的聊天室,客户端可以向服务端发送消息,并将消息广播给所有在线用户。

服务端```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("聊天室已启动");
    Thread.currentThread().join();
    }
}

上面的代码实现了一个简单的聊天室,使用 `@ServerEndpoint` 注解来标识该类是一个 WebSocket 服务端,使用 `@OnOpen`、`@OnMessage` 和 `@OnClose` 注解来定义服务端的行为。在 `onOpen` 方法中,将新用户加入到 `sessions` 集合中,表示该用户已经加入聊天室。在 `onMessage` 方法中,将收到的消息广播给所有在线用户。在 `onClose` 方法中,将离开的用户从 `sessions` 集合中移除,表示该用户已经离开聊天室。在 `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("连接关闭");
    }
    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("请输入您的昵称:");
        String nickname = scanner.nextLine();
        while (true) {
            System.out.print("[" + nickname + "]: ");
            String message = scanner.nextLine();
            session.getBasicRemote().sendText("[" + nickname + "]: " + message);
        }
    }
}

上面的代码实现了一个简单的聊天室客户端,使用 @ClientEndpoint 注解来标识该类是一个 WebSocket 客户端,使用 @OnOpen@OnMessage@OnClose 注解来定义客户端的行为。在 onOpen 方法中,表示连接成功。

onMessage 方法中,将收到的消息打印到控制台。在 onClose 方法中,表示连接关闭。在 main 方法中,使用 WebSocketContainer 类来创建一个 WebSocket 客户端,并使用 Session 类来操作连接。用户需要输入昵称,并通过控制台输入消息发送给服务端。

总结

本文介绍了 WebSocket 协议的基本概念和 Java 中的 WebSocket 实现方式。通过示例代码,演示了如何在 Java 中实现一个简单的聊天室,包括服务端和客户端。

WebSocket 协议具有实时性、性能和跨域支持等优势,在实时数据交互的场景中得到广泛应用。

到此这篇关于Java中实现WebSocket方法详解的文章就介绍到这了,更多相关Java实现WebSocket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Socket编程从零到实战详解(完整实战案例)

    Java Socket编程从零到实战详解(完整实战案例)

    这篇文章主要介绍了Java Socket编程从零到实战详解,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • SpringBoot读取配置的常用方式总结

    SpringBoot读取配置的常用方式总结

    在SpringBoot应用开发中,配置文件是不可或缺的一部分,它们帮助我们管理应用的运行时参数,使得应用的部署和维护变得更加灵活,本文将介绍六种常用的SpringBoot读取配置方式,需要的朋友跟着小编一起来看看吧
    2024-07-07
  • Java 两种延时thread和timer详解及实例代码

    Java 两种延时thread和timer详解及实例代码

    这篇文章主要介绍了Java 两种延时thread和timer详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • 基于SpringBoot和MongoDB实现实时分析和日志处理功能

    基于SpringBoot和MongoDB实现实时分析和日志处理功能

    实时分析和日志处理在现代应用程序开发中扮演着重要的角色,MongoDB是一个非常流行的NoSQL数据库,其高性能和灵活性使其成为实时分析和日志处理的理想选择,本文将介绍如何使用 Spring Boot 和 MongoDB 实现实时分析和日志处理的功能
    2023-06-06
  • Hibernate双向多对多映射关系配置代码实例

    Hibernate双向多对多映射关系配置代码实例

    这篇文章主要介绍了Hibernate双向多对多映射关系配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • idea配置Tomcat时没有Artifacts选项的解决方法

    idea配置Tomcat时没有Artifacts选项的解决方法

    本文主要介绍了idea配置Tomcat时没有Artifacts选项的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • IDEA中Maven依赖包下载不了的问题解决方案汇总

    IDEA中Maven依赖包下载不了的问题解决方案汇总

    这篇文章主要介绍了IDEA中Maven依赖包下载不了的问题解决方案汇总,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 浅谈Java基准性能测试之JMH

    浅谈Java基准性能测试之JMH

    JMH是Java Microbenchmark Harness的简称,一个针对Java做基准测试的工具。想准确的对一段代码做基准性能测试并不容易,因为JVM层面在编译期、运行时对代码做很多优化,当代码块处于整个系统中运行时并不一定会生效,产生错误的基准测试结果,这个问题就是JMH要解决的
    2021-06-06
  • Java实现经典捕鱼达人游戏的示例代码

    Java实现经典捕鱼达人游戏的示例代码

    《捕鱼达人》是一款以深海狩猎为题材的休闲竞技游戏。本文将利用Java实现这一经典的游戏,文中采用了swing技术进行了界面化处理,需要的可以参考一下
    2022-02-02
  • Java程序员应该遵守的10条纪律

    Java程序员应该遵守的10条纪律

    Java程序员有许多应遵循的守则或最佳实践方式。本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们,将会导致灾难性后果。
    2015-09-09

最新评论