Java 连接 WebSocket 入门教程

Java 连接 WebSocket 入门教程

1. WebSocket 简介

WebSocket 是一种全双工通信协议,它允许客户端和服务器之间建立持久连接,实现低延迟、实时交互。相比于传统的 HTTP 轮询,WebSocket 具有更高的效率和更低的带宽消耗。

2. Java WebSocket 依赖

在 Java 中,我们可以使用 javax.websocketSpring WebSocket 来实现 WebSocket 连接。

2.1 添加 Maven 依赖

对于 Java EE WebSocket:

xml 复制代码
<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.1</version>
</dependency>

对于 Spring WebSocket:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

3. Java WebSocket 服务器端实现

3.1 使用 Java EE 实现 WebSocket 服务器

java 复制代码
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

@ServerEndpoint("/websocket")
public class WebSocketServer {
    private static final CopyOnWriteArraySet<Session> sessions = new CopyOnWriteArraySet<>();
    
    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
        System.out.println("新连接建立: " + session.getId());
    }
    
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("收到消息: " + message);
        for (Session s : sessions) {
            s.getBasicRemote().sendText("服务器响应: " + message);
        }
    }
    
    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
        System.out.println("连接关闭: " + session.getId());
    }
    
    @OnError
    public void onError(Session session, Throwable error) {
        error.printStackTrace();
    }
}

3.2 配置 WebSocket 服务器

如果使用的是 Spring Boot,需要创建 WebSocket 配置类:

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/ws").setAllowedOrigins("*");
    }
}

4. Java WebSocket 客户端实现

使用 java.net.http.WebSocket 进行客户端连接:

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletionStage;

public class WebSocketClient {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();
        WebSocket webSocket = client.newWebSocketBuilder()
            .buildAsync(URI.create("ws://localhost:8080/websocket"), new WebSocketListener())
            .join();
        webSocket.sendText("Hello WebSocket!", true);
    }
}

class WebSocketListener implements WebSocket.Listener {
    @Override
    public void onOpen(WebSocket webSocket) {
        System.out.println("WebSocket 连接成功");
        webSocket.request(1);
    }

    @Override
    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
        System.out.println("收到消息: " + data);
        webSocket.request(1);
        return null;
    }
}

5. 测试 WebSocket 连接

  1. 启动 Java WebSocket 服务器。
  2. 运行 WebSocket 客户端,检查是否成功连接并发送/接收消息。
  3. 也可以使用 WebSocket 在线测试工具(如 websocket.org)进行测试。

6. 结论

通过本文,你学习了如何使用 Java 连接 WebSocket,包括服务器端和客户端的实现。WebSocket 适用于实时通信场景,如聊天应用、数据推送等,提高了网络通信的效率和交互体验。

相关推荐
程序员三藏2 分钟前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
Java技术小馆17 分钟前
langChain开发你的第一个 Agent
java·面试·架构
kangkang-19 分钟前
PC端基于SpringBoot架构控制无人机(二):MavLink协议
java·spring boot·后端·无人机
Dcs30 分钟前
Anthropic 爆严重安全漏洞!程序员机器沦陷
java
随心点儿37 分钟前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
不学无术の码农40 分钟前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python
sleepybear11131 小时前
在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home
python·智能家居·小米·home assistant·米家·ha xiaomi home
EnigmaCoder1 小时前
Java多线程:核心技术与实战指南
java·开发语言
纪伊路上盛名在1 小时前
(鱼书)深度学习入门1:python入门
人工智能·python·深度学习
攀小黑1 小时前
阿里云 使用TST Token发送模板短信
java·阿里云