- pom导入
<!--websocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
- 在典型的Spring WebSocket应用程序中,用户将实现
WebSocketMessageBrokerConfigurer
。例如,配置下所示:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/messages").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue/", "/topic/");
registry.setApplicationDestinationPrefixes("/app");
}
}
-
@Configuration
表示它是Spring配置类。 -
@EnableScheduling
表示定时任务开启。和@Scheduled
一起使用 -
@EnableWebSocketMessageBroker
支持由消息代理支持的WebSocket消息处理。 -
它首先调用
enableSimpleBroker()
以启用一个简单的基于内存的消息代理,以在前缀为“/ topic”的目标上将问候消息传回客户端。它还为绑定了@MessageMapping
注释方法的消息指定“/ app”前缀。此前缀将用于定义所有消息映射; 例如"/ app / "
- 使用Spring Session的WebSocket 配置(spring session将session存入redis 提高集群效率和共享)
- spring session 参考 链接
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig
extends AbstractSessionWebSocketMessageBrokerConfigurer<Session> {
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/messages").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue/", "/topic/");
registry.setApplicationDestinationPrefixes("/app");
}
}
spring官方websocket示例应用程序
- 尝试使用该应用程序。使用以下信息进行身份验证:
-
用户名 rob
-
密码 123456
- 现在单击“ 登录”按钮。您现在应该被认证为用户rob。
- 打开隐身窗口并访问http:// localhost:8080/系统
- 系统将提示您登录表单。使用以下信息进行身份验证:
-
用户名 luke
-
密码 123456
- 现在从rob发送消息给luke。该消息应该出现。
- 等待两分钟,然后再尝试从rob发送消息给luke。您将看到不再发送该消息。
| 为什么两分钟?Spring会话将在60秒后到期,但Redis的通知不能保证在60秒内发生。为了确保套接字在合理的时间内关闭,Spring Session每分钟在00秒运行一次后台任务,强制清除任何过期的会话。这意味着在WebSocket连接终止之前,您需要等待最多两分钟。 |
- 尝试访问http:// localhost:8080/系统 将提示您再次进行身份验证。这表明会话正常到期。
- 现在重复相同的练习,但不是等待两分钟,而是每隔30秒从每个用户发送一条消息。您将看到消息继续发送。尝试访问http:// localhost:8080/系统 不会再次提示您进行身份验证。这表明会话保持活跃。
- js文件下载
持续更新