给我提供一个springboot方法,要求可以和很多客户端调用WebSocket做长链接,要求可以给客户端发送消息,之前提供的都没用,没用一个能正常运行的,需要什么依赖也一并提供,要很详细,保证可用,不要搞乱七八糟的,复制粘贴全报错的那张,服务器IP是192.168.124.20,端口号用的9090
时间: 2023-08-05 08:04:46 浏览: 80
springboot整合websocket
好的,以下是一个使用Spring Boot搭建WebSocket长连接的例子,可以实现给多个客户端发送消息。
首先,需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
然后,在Spring Boot的启动类上添加`@EnableWebSocket`注解,启用WebSocket功能。
```java
@SpringBootApplication
@EnableWebSocket
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
接下来,创建一个WebSocket处理器,用于处理客户端发来的消息和向客户端发送消息。代码如下:
```java
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// 添加新的WebSocketSession到sessions中
sessions.add(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
// 从sessions中移除WebSocketSession
sessions.remove(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// 处理客户端发来的消息
String payload = message.getPayload();
System.out.println("Received message: " + payload);
}
public static void sendMessageToAll(String message) throws IOException {
// 向所有客户端发送消息
for (WebSocketSession session : sessions) {
session.sendMessage(new TextMessage(message));
}
}
}
```
在上面的代码中,我们使用了`CopyOnWriteArrayList`来存储所有的WebSocketSession,这是因为多个线程可能同时访问sessions,而`CopyOnWriteArrayList`是线程安全的。
`afterConnectionEstablished`方法在建立WebSocket连接后被调用,我们在这里将新的WebSocketSession添加到sessions中。
`afterConnectionClosed`方法在WebSocket连接关闭后被调用,我们在这里将WebSocketSession从sessions中移除。
`handleTextMessage`方法用于处理客户端发来的消息,这里我们只是简单地打印出收到的消息。
最后,我们定义一个RESTful API,用于向所有客户端发送消息。代码如下:
```java
@RestController
public class MyController {
@GetMapping("/send")
public String sendMessage() throws IOException {
MyWebSocketHandler.sendMessageToAll("Hello, world!");
return "Message sent.";
}
}
```
在上面的代码中,我们定义了一个GET请求的处理方法,当客户端请求这个API时,会向所有客户端发送一条消息。
最后,在application.properties文件中配置WebSocket的端口号:
```
server.port=9090
```
这样就完成了WebSocket的配置。启动应用程序后,可以使用任何WebSocket客户端连接到`ws://192.168.124.20:9090`,然后就可以向所有客户端发送消息了。
阅读全文