我正在使用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进行反射可能会起作用。