首页 > 解决方案 > Java Websocket 无法正确打开 WAS 9.0

问题描述

我已经创建了一个非常简单的 Java websocket,我正在尝试在我们的测试环境中对其进行测试。在我的本地机器上,websocket 无缝打开,保持就绪状态代码“1”,一切似乎都运行良好。

然而,在我的测试机器上,即使套接字似乎打开了,我仍然检查 readystate 并给出代码“1”,从 Https 升级到 websocket 发生在网络选项卡中,我的 Java 代码中的 OnOpen 函数没有似乎被触发了(我正在尝试在套接字打开时记录新连接附带的 userId,并且在我的测试环境日志中也没有显示。在我的本地机器上,这也可以)

private static final ArrayList<Session> connectedSessions = new ArrayList<>();

@OnClose
public void closeSession(Session session) {
    try {
        connectedSessions.remove(session);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
    }
}

@OnMessage
public void onMessage(String message, final Session session) {
    broadcastMessage(message, session);
}

@OnOpen
public void openSession(@PathParam("userId") String userId, Session session) {
    try {
        session.getUserProperties().put("USER_ID", userId);
        connectedSessions.add(session);
        LOGGER.info("-------- Connection id ---------" + userId);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
    }
}

在前端,我使用的是 angular,但没有其他 websocket 框架,只是普通的 javascript,而对于我的后端,我正在运行带有 Websphere 应用程序服务器 9.0 的 Xframe 2.2。我确定我正在调用正确的端点,因为它可以在我的本地机器上运行,并且我已经使用多个会话对其进行了多次测试。

编辑:添加下面的角度代码

this.ws= new WebSocket("wss://" + env.websocketUrl + "socket" + this.context.settings.userId);
this.ws.onmessage = (event) => {
      this.update(event.data, this.context.settings.userId);
    };

 doSomething(data) {
        this.ws.send(data);
}

需要注意的是消息被发送。我检查了 WS 的框架,但没有得到任何响应。它保持“待定”

标签: javascriptjavaangularwebsocketwebsphere

解决方案


可以关闭。原来我的公司正在阻止在我们的测试/生产服务器上运行的任何 http2 调用。这就是为什么 websockets 在我的本地机器上工作的原因。


推荐阅读