Jetty Websocket API 会话

问题描述

您好,我尝试了好几个小时从 Jetty 获取 Websocket API,同时会话运行。

我的问题是,我无法与 Session 进行外部交互以发送数据。 我只能与所有会话交互,而不仅仅是一个

我尝试使用“Sec-WebSocket-Key”作为会话密钥,但它总是返回 java.lang.NullPointerException 作为 onWebSocketError。

我已经尝试将 Session 保存在 HashMap 中,但是每次当我想执行 sendString 时,HashMap 中的 Session 都是 NULL。

我的代码

连接方式

@Override
public void onWebSocketConnect(Session sessionIO) {
    sessionIO.setIdleTimeout(Integer.MAX_VALUE);

    System.out.print(gsonIO.toJson(this.getSession().getUpgradeResponse().getHeaders()));

    sessionsIO.add(sessionIO);
    loggerIO.log(LogType.soCKET,"New Socket Connection from Client " + sessionIO.getRemoteAddress() + " with Sesssion ID: " + sessionIO.getPolicy().getBehavior().name() + ".");
}

我尝试从数组中取出会话的函数

 public static Session getSession(String handshakeIO) {
    //String handshakeIO = sessionIO.getUpgradeRequest().getHeader("Sec-WebSocket-Key");
    Session cacheIO = null;

    for (Session rowIO : sessionsIO) {
        if (handshakeIO.equalsIgnoreCase(rowIO.getUpgradeRequest().getHeader("Sec-WebSocket-Key"))) {
            loggerIO.info("FOUND SESSION WITH Sec-WebSocket-Key " + handshakeIO + ".");
            cacheIO = rowIO;
        }
    }
    return cacheIO;
}

获取会话

@SneakyThrows
@EventHandler
public static void onJoin(UserLoginEvent eventIO) {
    Habbo playerIO = eventIO.habbo;
    int idio = playerIO.getHabboInfo().getId();

    for (Session rowIO : sessionsIO) {
        if (rowIO.isopen()) {
            rowIO.getRemote().sendString(gsonIO.toJson(new ActionPaket("broadcast","joinedplayer")));
        }
    }

    if (ViceCache.playerIO.containsKey(idio)) {
        Session sessionIO = ViceCache.getSession(ViceCache.playerIO.get(idio).getSessionIO());

        if (sessionIO.isopen()) {
            sessionIO.getRemote().sendString(gsonIO.toJson(new ActionPaket("session","granted")));
        }

        playerIO.whisper("Voicechat was successfully connected to Room.");
        loggerIO.info("Player " + playerIO.getHabboInfo().getUsername() + " in Cache joined the Server,sending Callback.");
    } else {
        playerIO.whisper("To use Voice Chat,please download the Offical Vice Client.");
        loggerIO.warning("Can't find Player " + playerIO.getHabboInfo().getUsername() + " with ID " + idio + " in Cache,cannot send Callback for ViceChat.");
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)