有没有一种方法可以创建一个全局侦听器来接收来自Java网络套接字的消息



我正在使用AngularJS、Ionic和Java作为后端。我正在使用websocket创建实时聊天。

我想设置一个监听器,在我的应用程序中的任何地方接收所有消息,以处理它并在没有nodejs的情况下保持它。

有办法做到这一点吗?

我认为在Java WebSocket API中没有准备好的方法来满足这些要求。(尽管,使用JMX不需要一点努力就可以实现。)但是,您可以简单地通过编写父端点类来实现这一点,让每个端点类都像下面这样扩展它:

// Assumes you use some dependency injection framework
@Component 
// Your own POJO to be notified of every socket events
public class WebSocketListener {
    public void onOpen(String id) {
        // Your logic here
    }
    public void onMessage(String id, Object message) {
        // Your logic here
    }
    public void onClose(String id) {
        // Your logic here
    }
}
// A parent class to notify your own global listener
// Extend it if you want to listen socket's event through some specific path
public abstract class NotifiableEndpoint {
    @Inject
    private WebSocketListener listener;
    @OnOpen
    public void onOpen(Session session) {
        listener.onOpen(session.getId());
    }
    @OnMessage
    public void onMessage(Session session, StringOrByteBuffer data) {
        listener.onOpen(session.getId(), data);
    }
    @OnClose
    public void OnClose(Session session) {
        listener.onOpen(session.getId());
    }
}
// A concrete class to write your business logic
@ServerEndpoint("/hello")
public class YourEndpoint extends NotifiableEndpoint {
    // Your logic
}

不使用继承,通过ServerEndpointConfig.Configurator.getEndpointInstance进行反射可能会起作用。

最新更新