1:继承接口实现websocket(这样的写法,任何的路径都可以连接过来,如果使用@ServerEndpoint这样的方式的话,就是现在匹配的路径才可)
java
复制代码
package com.demo.websocket;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.net.BindException;
import java.net.InetSocketAddress;
@Component
public class CustomWebSocketServer extends WebSocketServer {
private static int port = 7788;
public CustomWebSocketServer() {
super(new InetSocketAddress(port));
super.start();
System.out.println("WebSocket 服务已启动,端口:" + port);
}
@PreDestroy
public void destroy() throws IOException, InterruptedException {
super.stop();
System.out.println("WebSocket 服务已关闭");
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("客户端已连接");
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("客户端已断开");
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("收到消息: " + message);
try {
Thread.sleep(2000);
conn.send("hi,客户端"); // 回声测试
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onError(WebSocket conn, Exception ex) {
if (ex instanceof BindException) {
System.err.println("端口占用,请检查配置");
} else {
ex.printStackTrace();
}
}
@Override
public void onStart() {
System.out.println("WebSocket 服务初始化完成");
}
}
2:pom.xml配置
xml
复制代码
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>