Java中的WebSocket:用于实时通信的Java-WebSocket库

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

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

开始课程

Java中的WebSocket:Java-WebSocket库



在现代Web开发中,对实时双向通信的需求日益增长。聊天应用、在线游戏、股票行情、通知推送——所有这些都需要在客户端和服务器之间进行即时数据传输。对于Java而言,最流行且可靠的WebSocket协议实现之一就是Java-WebSocket库(也称为nv-websocket-client)。



本文将详细介绍如何使用Java-WebSocket创建服务器端和客户端应用程序,提供代码示例,并探讨最佳实践。



什么是Java-WebSocket?



Java-WebSocket是一个轻量级、功能强大的开源库,实现了WebSocket协议(RFC 6455)。它使Java开发者能够轻松创建WebSocket服务器和客户端,而无需深入协议的低级细节。



该库的主要功能包括:

  • 完全支持WebSocket的服务器端和客户端。
  • 通过SSL/TLS支持WSS(安全WebSocket)。
  • 连接断开时自动重连。
  • 处理分片消息。
  • 支持自定义扩展。
  • 基于事件的简单API(onOpen, onMessage, onClose, onError)。


安装与配置



要使用该库,请在您的pom.xml(Maven)中添加依赖:



<dependency>    <groupId>org.java-websocket</groupId>    <artifactId>Java-WebSocket</artifactId>    <version>1.5.4</version></dependency>


如果您使用Gradle:



implementation 'org.java-websocket:Java-WebSocket:1.5.4'


创建WebSocket服务器



让我们看一个简单的WebSocket服务器示例,它接收消息并将其发送回所有连接的客户端(回声服务器):



import org.java_websocket.WebSocket;import org.java_websocket.handshake.ClientHandshake;import org.java_websocket.server.WebSocketServer;import java.net.InetSocketAddress;import java.util.Set;

public class EchoServer extends WebSocketServer {

public EchoServer(int port) { super(new InetSocketAddress(port)); }

@Override public void onOpen(WebSocket conn, ClientHandshake handshake) { System.out.println("新连接:" + conn.getRemoteSocketAddress()); }

@Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { System.out.println("断开连接:" + conn.getRemoteSocketAddress() + " (" + reason + ")"); }

@Override public void onMessage(WebSocket conn, String message) { System.out.println("收到消息:" + message); // 将消息发送回所有客户端 Set<WebSocket> connections = getConnections(); for (WebSocket client : connections) { client.send("回声:" + message); } }

@Override public void onError(WebSocket conn, Exception ex) { System.err.println("错误:" + ex.getMessage()); if (conn != null) { conn.close(); } }

@Override public void onStart() { System.out.println("服务器已在端口 " + getPort() + " 启动"); }

public static void main(String[] args) { int port = 8887; EchoServer server = new EchoServer(port); server.start(); }}


该服务器在端口8887上运行,当收到任何消息时,会将其以"回声:"为前缀发送回所有连接的客户端。



创建WebSocket客户端



现在我们来编写一个客户端,连接到我们的服务器

推荐