ずいぶん間が空いたけど、
javaでwebsocketやるときのサーバ側クラス設計ができました。
↓のような感じです。
(クラス図あってるかな??)
ポイントとしては、
- websocketのSessionインスタンスを内包するクラスを作る
- ユーザ情報はセッション内で管理する
- ペア(自分と相手)の情報を管理するクラスを作成しておく
- 実際のwebsocket処理では、スレッドセーフなCollectionを使ってインスタンスを管理する
という感じになります。
スレッドセーフなCollectionでないと、インスタンスの取り違えが起きますので、ご注意を。
ThreadLocalを使うという手もありますが、
websocketの場合、
- openハンドラの呼び出しは1回
- messageハンドラの呼び出しはn回
- closeハンドラの呼び出しは1回
なので、open時に必要なインスタンスを作成して、closeで破棄するとよいです。
(※messageで作成するときもありますが)
実は、websocketではこの考えは結構重要で、
たとえば、DB接続する際、
messageハンドラで、
connect -> disconnect
を繰り返すと、高負荷に耐えられないです。
ここで、
openハンドラでconnectし、closeハンドラでdisconnectする。
そして、messageハンドラで操作する、
という形だと接続のコストが抑えられるので、
結構有効です。
(※もちろん、アプリケーションの特性によりますが)
次は、javaのソースコードを公開する予定。
node.js側は気力があったら作成します。。
コメントがあればどうぞ