有没有办法创建一个全局侦听器来接收来自Java websocket的消息?

时间:2015-03-25 14:02:41

标签: java angularjs websocket ionic

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

我想设置一个监听器,以便在我的应用程序中的任何位置接收所有消息以处理它并保留它而不使用nodejs。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为在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进行反射可能会有效。