Apache Mina,创建我自己的IoSession:如何?

时间:2011-08-03 14:45:35

标签: java apache-mina

我用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,这样我就可以识别哪个客户端正在向服务器发送消息。

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

由于

1 个答案:

答案 0 :(得分:2)

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

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();
    }
}

我更喜欢子类化解决方案,但我只是采用了这种方法。 希望这有所帮助,其他解决方案将受到欢迎。