我正在构建一个像 slack 这样的应用程序。我有很多客户端在网络和移动设备上运行。它们通过 websocket 连接Stomp。我想实时检测哪个用户在线和离线。Websocket服务器正在运行spring framework。spring 接受如下请求。我将其heartbeat incoming设置outgoing为20000 ms。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
private List<StompPrincipal> onlineUsers = new ArrayList<>();
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*")
.setHandshakeHandler(new CustomHandshakeHandler())
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/ws");
config.enableSimpleBroker("/ws")
.setTaskScheduler(new DefaultManagedTaskScheduler())
.setHeartbeatValue(new long[]{20000,20000});
}
}
为了确定哪个用户请求Websocket,我添加了一个握手处理程序,如下所示。
class CustomHandshakeHandler extends DefaultHandshakeHandler {
@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler,
Map<String, Object> attributes) {
String username=(String)attributes.get("name");
StompPrincipal user = new StompPrincipal(username)
onlineUsers.add(user);
return user;
}
}
class StompPrincipal implements Principal {
String name;
StompPrincipal(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
如上面的代码,我可以看到用户onlineUser在请求后添加了 , websocket server。但问题是,我无法确定用户上线后是否离线。您能否建议我确定这一点。通过这种方式确定在线和离线用户是最佳实践吗?如果没有,等待您的建议。现在非常感谢。
蛊毒传说
鸿蒙传说
qq_花开花谢_0
慕容森
相关分类