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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot异步输出Logback日志方法详解

    Spring Boot异步输出Logback日志方法详解

    这篇文章主要给大家介绍了关于Spring Boot异步输出Logback日志的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 一不小心就让Java开发踩坑的fail-fast是个什么鬼?(推荐)

    一不小心就让Java开发踩坑的fail-fast是个什么鬼?(推荐)

    这篇文章主要介绍了Java fail-fast,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • IDEA中scala生成变量后自动显示变量类型问题

    IDEA中scala生成变量后自动显示变量类型问题

    这篇文章主要介绍了IDEA中scala生成变量后自动显示变量类型问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 你一定不知道的Java Unsafe用法详解

    你一定不知道的Java Unsafe用法详解

    Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,下面这篇文章主要给大家介绍了关于Java Unsafe用法的相关资料,需要的朋友可以参考下
    2021-10-10
  • MyBatis 三表外关联查询的实现(用户、角色、权限)

    MyBatis 三表外关联查询的实现(用户、角色、权限)

    这篇文章主要介绍了MyBatis 三表外关联查询的实现(用户、角色、权限),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    Spring Boot与RabbitMQ结合实现延迟队列的示例

    本篇文章主要介绍了Spring Boot与RabbitMQ结合实现延迟队列的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Mybatis使用useGeneratedKeys获取自增主键的方法

    Mybatis使用useGeneratedKeys获取自增主键的方法

    这篇文章主要给大家介绍了关于Mybatis使用useGeneratedKeys获取自增主键的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Mybatis-Plus根据时间段去查询数据的实现示例

    Mybatis-Plus根据时间段去查询数据的实现示例

    这篇文章主要介绍了Mybatis-Plus根据时间段去查询数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • AntDesign多环境配置启动过程详解

    AntDesign多环境配置启动过程详解

    这篇文章主要为大家介绍了AntDesign多环境配置启动过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java中ArrayList的工作原理详解

    Java中ArrayList的工作原理详解

    本文主要介绍了Java中ArrayList的工作原理,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论