【问题标题】:Is there a way to create a global listener to receive messages from a Java websocket?有没有办法创建一个全局监听器来接收来自 Java websocket 的消息?
【发布时间】:2015-03-25 14:02:41
【问题描述】:

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

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

有没有办法做到这一点?

【问题讨论】:

  • 你在使用Tomcat吗?看看this
  • 当然。我正在使用tomcat,我创建了一个websocket。问题是我只能在视图中管理从 websocket 收到的消息。我希望能够管理整个项目中的所有消息
  • 你试过类似github.com/wilk/ng-websocket这样的模块吗?

标签: java angularjs websocket ionic


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多