在我的项目中,我尝试为我的WebSocket示例实现一个事件处理。所以我基本上有3个类:
我的AuthClient类,它扩展了WebsocketClient并具有onMessage回调。在此onMessage方法中,websocket可以进入不同的状态,如“hello”、“pending_finish”、“finish”等。
public class AuthClient extends WebSocketClient {
@Override
onMessage(String message) {
switch(message) ... // data events here
}
}
我现在正在尝试编写一个名为ClientManager的父类,我希望在其中存储和管理多个websocket。
// trying to receive data from specific data events for each client here
public class ClientManager {
private int maxClients;
private final Map<String, AuthClient> clients;
private final HashSet<String> tokens;
public ClientManager(HashSet<String> tokens, int maxClients) {
this.tokens = tokens;
this.maxClients = maxClients;
this.clients = new HashMap<>(maxClients);
}
}
我的问题是,如何将从WebsocketClient收到的数据在此onMessage回调中传递给ClientManager?我需要一个不会有任何重大性能损失的解决方案。
我已经尝试过用事件实现一个接口,但我不太明白它是否能与共享数据一起工作。
1条答案
按热度按时间qlzsbp2j1#
这看起来是一个很好的观察者模式的用例。你的观察者是你的管理器类,你的可观察对象是你的WebSocket客户端。任何时候你创建一个新的websocket客户端,使用registerObserver方法注册你的管理器类示例。然后当你想从你的websocket客户端向你的管理器转发一个消息时,您可以简单地调用notifyObservers方法将请求转发给任何已注册的观察器。2请看下面的模式信息:https://www.baeldung.com/java-observer-pattern