Java WebSocket

简介: Java WebSocket

Java WebSocket


WebSocket 是一种基于 TCP 协议的全双工通信协议,可以实现客户端和服务器之间的实时通信。在 Java 中,我们可以使用 Java API for WebSocket(JSR 356)来实现 WebSocket。


WebSocket API


Java API for WebSocket 提供了一组 API,用于实现 WebSocket。以下是 WebSocket API 中的一些重要类和接口:


  • javax.websocket.Endpoint:WebSocket 端点,用于处理 WebSocket 连接的生命周期。

  • javax.websocket.Session:WebSocket 会话,表示客户端和服务器之间的一次连接。

  • javax.websocket.MessageHandler:WebSocket 消息处理器,用于处理客户端发送的消息。

  • javax.websocket.server.ServerEndpoint:WebSocket 服务器端点,用于将 WebSocket 端点暴露为一个 URI。


实现 WebSocket 服务器


要实现 WebSocket 服务器,我们需要创建一个类,继承自 javax.websocket.Endpoint 类,并实现它的 onOpenonCloseonErroronMessage 方法,分别用于处理 WebSocket 连接的打开、关闭、错误和消息。


以下是一个简单的 WebSocket 服务器的示例代码:

import java.io.IOException;
import javax.websocket.Endpoint;
import javax.websocket.EndpointConfig;
import javax.websocket.MessageHandler;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket")
public class WebSocketServer extends Endpoint {
    @Override
    public void onOpen(Session session, EndpointConfig config) {
        System.out.println("WebSocket connection opened: " + session.getId());
        session.addMessageHandler(new MessageHandler.Whole<String>() {
            @Override
            public void onMessage(String message) {
                System.out.println("Received message: " + message);
                try {
                    session.getBasicRemote().sendText("Server received message: " + message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    @Override
    public void onClose(Session session, CloseReason closeReason) {
        System.out.println("WebSocket connection closed: " + session.getId() + " Reason: " + closeReason.getReasonPhrase());
    }
    @Override
    public void onError(Session session, Throwable throwable) {
        System.err.println("WebSocket error occurred: " + session.getId());
        throwable.printStackTrace();
    }
    @Override
    public void onMessage(Session session, String message) {
        System.out.println("Received message: " + message);
        try {
            session.getBasicRemote().sendText("Server received message: " + message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我们创建了一个 WebSocketServer 类,并使用 @ServerEndpoint("/websocket") 注解将它暴露为 /websocket URI。在onOpen 方法中,我们打印出 WebSocket 连接的 ID,并添加一个消息处理器,用于处理客户端发送的消息。在 onCloseonError法中,我们分别打印出 WebSocket 连接关闭和错误的信息。在 onMessage 方法中,我们打印出接收到的消息,并向客户端发送一个响应消息。


实现 WebSocket 客户端


要实现 WebSocket 客户端,我们可以使用 Java API for WebSocket 提供的 javax.websocket.ContainerProvider 类,通过它的getWebSocketContainer 方法获取一个 javax.websocket.WebSocketContainer 对象,然后使用它的 connectToServer 方法连接WebSocket 服务器。


以下是一个简单的 WebSocket 客户端的示例代码:

import java.net.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import javax.websocket.ContainerProvider;
@ClientEndpoint
public class WebSocketClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("Received message: " + message);
    }
    public static void main(String[] args) throws Exception {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        URI uri = new URI("ws://localhost:8080/websocket");
        try (Session session = container.connectToServer(WebSocketClient.class, uri)) {
            session.getBasicRemote().sendText("Hello, server!");
        }
    }
}

在上面的示例中,我们创建了一个 WebSocketClient 类,并使用 @ClientEndpoint 注解将它标记为 WebSocket 客户端。在onMessage 方法中,我们打印出接收到的消息。在 main 方法中,我们使用 ContainerProvider 类获取一个 WebSocketContainer 对象,并使用它的connectToServer 方法连接 WebSocket 服务器。在连接成功后,我们向服务器发送一个消息。

相关文章
|
1月前
|
Web App开发 消息中间件 监控
使用 Java + WebSocket 实现简单实时双人协同 pk 答题:技术干货分享
【10月更文挑战第4天】在现代互联网应用中,实时互动已经成为提升用户体验的重要一环。特别是在在线教育、游戏竞技等领域,实时协同功能显得尤为重要。今天,我们将围绕“使用 Java + WebSocket 实现简单实时双人协同 pk 答题”这一主题,分享相关技术干货,帮助你在工作和学习中更好地理解和应用这一技术。
60 2
|
3月前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
158 0
|
4月前
|
网络协议 Java API
如何在Java中实现WebSocket通信
如何在Java中实现WebSocket通信
|
4月前
|
移动开发 监控 Java
如何使用Java中的WebSocket?
如何使用Java中的WebSocket?
|
5月前
|
负载均衡 监控 网络协议
在 Java 中使用 WebSocket
在 Java 中使用 WebSocket
193 1
|
5月前
|
JavaScript 前端开发 Java
蓝易云 - Java现实WebSocket教程
以上就是在Java中实现WebSocket的基本步骤。
27 1
|
4月前
|
监控 网络协议 Java
Java中的WebSocket实时通信技术详解
Java中的WebSocket实时通信技术详解
|
5月前
|
负载均衡 安全 Java
Java一分钟之-WebSocket:实时通信协议
【6月更文挑战第1天】WebSocket是实现客户端与服务器长连接、双向通信的协议,简化实时数据传输。Java中的WebSocket实现基于JSR 356。本文涵盖WebSocket基础(持久连接、双向通信、低延迟)、工作流程、常见问题(安全、连接管理、数据编码)及Java实现示例,强调错误处理、心跳机制和资源管理的最佳实践。
349 6
|
4月前
|
监控 网络协议 安全
Java中的WebSocket编程详解
Java中的WebSocket编程详解
|
4月前
|
Java 应用服务中间件 API
如何在Java中实现WebSocket?
如何在Java中实现WebSocket?