我用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,这样我就可以识别哪个客户端正在向服务器发送消息。
此外,如果还有其他更好的方法可以实现,请随时告诉我。
由于
答案 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();
}
}
我更喜欢子类化解决方案,但我只是采用了这种方法。 希望这有所帮助,其他解决方案将受到欢迎。