springboot 使用netty-socketio共用springboot端口并有多个前缀请求地址 完整示例代码
时间: 2024-09-18 19:12:38 浏览: 38
Spring Boot 和 Netty-SocketIO 的结合可以方便地在同一个项目中提供REST API和WebSocket服务,共享相同的服务器端口。为了实现有多个前缀请求地址的功能,你可以创建一个`WebMvcConfigurer`实现类,并在其中配置`prefixes`。以下是一个简单的示例:
首先,确保添加了必要的依赖,例如`spring-boot-starter-web`、`spring-boot-starter-websocket`和`socket.io-client-java`:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<!-- 选择合适的版本 -->
</dependency>
</dependencies>
```
然后创建一个`WebConfig`类,继承自`WebMvcConfigurerAdapter`:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许跨域请求,这里可以修改为你需要的域名
.allowedMethods("*") // 允许所有HTTP方法
.allowCredentials(true) // 是否允许发送cookie
.maxAge(3600); // 跨域缓存时间(秒)
}
/**
* 自定义处理多个请求前缀
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/api/*").addResourceLocations("classpath:/static/api/");
registry.addResourceHandler("/socket.io/*").addResourceLocations("classpath:/static/socket.io/"); // 添加WebSocket资源路径
}
}
```
在这个例子中,`/api/*`用于REST API,`/socket.io/*`用于Socket.IO连接。
最后,在`Application`启动类里启用WebSocket:
```java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public SocketIOServer socketIoServer() {
SocketIOServer server = new SocketIOServer(8080, new YourSocketIoEndpoint()); // 指定端口号和处理器类
return server;
}
// ...其他配置...
}
```
这里假设你有一个名为`YourSocketIoEndpoint`的处理器类,它会处理Socket.IO事件。
注意:`YourSocketIoEndpoint`需要实现`SocketIOEndpoint`接口,并且配置适当的WebSocket处理器。
阅读全文