Java WebSocket 库:实时实现完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java WebSocket 库:实时应用程序开发完整指南

WebSocket 是一种协议,通过单个长期存在的 TCP 连接在客户端和服务器之间提供双向通信。在 Java 中,有多个成熟的库可以简化 WebSocket 的使用。在本文中,我们将介绍主要的库、它们的功能,并提供实用的代码示例。



1. Java WebSocket API (JSR 356)

用于 Java EE / Jakarta EE 中 WebSocket 操作的标准 API。它是应用服务器(WildFly、TomEE、GlassFish)的一部分,允许创建服务器端和客户端端点。

主要功能:

  • 注解 @ServerEndpoint 和 @ClientEndpoint
  • 支持文本和二进制消息
  • 会话和生命周期管理
  • 与 CDI(上下文和依赖注入)集成

服务器端点示例:

import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;

@ServerEndpoint("/chat")public class ChatEndpoint {

@OnOpen public void onOpen(Session session) { System.out.println("新连接:" + session.getId()); session.getUserProperties().put("username", "访客"); }

@OnMessage public String onMessage(String message, Session session) { String username = (String) session.getUserProperties().get("username"); return username + ": " + message; }

@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("连接已关闭:" + reason.getReasonPhrase()); }

@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}

客户端示例:

import javax.websocket.*;import java.net.URI;

@ClientEndpointpublic class ChatClient {

private Session session;

@OnOpen public void onOpen(Session session) { System.out.println("已连接到服务器"); this.session = session; }

@OnMessage public void onMessage(String message) { System.out.println("收到:" + message); }

public void sendMessage(String message) throws IOException { if (session != null && session.isOpen()) { session.getBasicRemote().sendText(message); } }

public static void main(String[] args) throws Exception { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ChatClient client = new ChatClient(); container.connectToServer(client, new URI("ws://localhost:8080/chat")); client.sendMessage("你好,世界!"); Thread.sleep(1000); }}


2. Tyrus(参考实现)

Tyrus 是 Oracle 对 JSR 356 的参考实现。它可以用作独立库,无需完整的应用服务器。非常适合微服务和轻量级应用程序。

特点:

  • 可与 Grizzly、Jetty 或 JDK HTTP 服务器一起使用
  • 支持 SockJS,以兼容不支持 WebSocket 的浏览器
  • 可配置的过滤器和拦截器
  • 通过 XML 或 Java Config 进行灵活配置

基于 Tyrus + Grizzly 的独立服务器示例:

import org.glassfish.tyrus.server.Server;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/echo")public class EchoEndpoint {

@OnMessage public String echo(String message) { return "回声:" + message; }

public static void main(String[] args) { Server server = new Server("localhost", 8025, "/ws", EchoEndpoint.class); try {

推荐