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 服务器。在连接成功后,我们向服务器发送一个消息。

你可能感兴趣的:(java,websocket,开发语言)