2

我用 apache mina 玩了几天,我想问你如何通过扩展(或实现)IoSession 来创建类似 MyIoSession 的东西。

我想这样做的原因是因为在 Handler 类中我想要这样的东西:

public class MyHandler extends IoHandlerAdapter{
    public void messageReceived( MyIoSession session, Object message ) throws Exception
    {
        // here I have MyIoSession instead of IoSession which will have more info something
        // like an unique ID
    }
}

这样 MyIoSession 将有一些唯一的 ID,这样我将确定哪个客户端正在向服务器发送消息。

另外,如果还有其他更好的方法可以实现这一点,请随时告诉我。

谢谢

4

1 回答 1

2

我有一个类似的问题,我想在 IoSession 中存储特定信息,就像你想要的唯一 ID 一样。由于我没有找到如何正确扩展这整个混乱的方法(我正在寻找一个可以传递 IoSessionFactory 之类的东西以便让 MINA 创建我自己的IoSession实现的地方),我使用了setAttribute(Object, Object)方法存储有关此会话的信息。你可以这样做:

public class MyHandler extends IoHandlerAdapter{
    private enum AttributeKeys {
        KEY_UNIQUEID;
    }
    public void sessionCreated(IoSession session) throws Exception {
        //create and remember a uniqueID upon session creation
        session.setAttribute(AttributeKeys.KEY_UNIQUEID, createUniqueID());
    }

    //called with the regular IoSession
    public void messageReceived(IoSession session, Object message) throws Exception {
        //wherever you need the UniqueID, use getSessionUniqueID(session);
    }

    public String getSessionUniqueID(session){
       return session.getAttribute(AttributeKeys.KEY_UNIQUEID).toString();
    }
}

我也更喜欢子类化解决方案,但我只是选择了这个。希望这对您有所帮助,欢迎其他解决方案。

于 2011-08-03T15:22:06.773 回答