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 适用于实时通信场景,如聊天应用、数据推送等,提高了网络通信的效率和交互体验。

相关推荐
AskHarries3 分钟前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
程序员小远22 分钟前
Python自动化测试框架及工具详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
daidaidaiyu39 分钟前
ThingsBoard 规则链系统源码分析和自定义定时器
java
sleven fung1 小时前
MinerU与BabelDOC与KTransformers与OpenAI API库
开发语言·python·ai·langchain
小毛驴8501 小时前
spring-boot-maven-plugin,maven-compiler-plugin 功能对比
java·python·maven
萤萤七悬1 小时前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
csdn_aspnet1 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
霸道流氓气质2 小时前
通义灵码 IDEA 插件完全使用指南
java·ide·intellij-idea
诸葛务农2 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法
Percep_gan2 小时前
Java8中的stream的测试使用
java