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

一意の ID と同じように、特定の情報を IoSession に保存したいという同様の問題がありました。この混乱全体を適切に拡張する方法がわからなかったので (MINA に独自のIoSession実装を作成させるために、IoSessionFactory のようなものを渡すことができる場所を探していました)、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 に答える