cometによる各ブラウザの同期方法を考える
cometによる各ブラウザの同期方法を考える
DWRのリバースAjax方式(comet)で複数のクライアントと通信を行う場合、各クライアントが持ってるデータの整合性をどのようにしてとるのか決めなくてはいけない
- 更新箇所のみを通知する方法
- 最も通信量が少なくなるというメリットがある
- ただし後から接続したクライアントは今までのデータを受け取れない
- 例えば、お絵かきチャットで、後から部屋に入ってきた人はすでに描いてある絵を見ることができない
- 受け取っていないデータをリクエストする方法を考えなくてはいけない
- 毎回データを丸ごと送る方法
- データを丸ごと送ってくるので、「更新箇所のみを通知する方法」のように、受け取っていないデータ、欠けているデータの心配をしなくていい
- データを丸ごと送ってくるので、通信量が増える
- すでに受信済みの重複するデータも送られてくる
- 重複するデータのなかから、最新のデータを取り出して差分だけ反映する処理が必要
- その処理が面倒なら、毎回送られてくる全てのデータをリセットして反映するという方法もある
考察
DWRはサーバ側のJavaとブラウザ側のjavascriptの橋渡しをしてくれているだけで、具体的な使い方は結構好き勝手にできる。自由度が高すぎる反面、自分で賢い使い方を考えないと大変なことになる。僕はjavascriptに振り回されて散々だった。どういう使い方ができれば便利なのかな。
しんさんの出張所ではjavascriptを書かないでScriptProxyを使うことによってパラメータをとってくる方法が挙げられていた。これは面白いので見たほうがいい。
http://d.hatena.ne.jp/shin/20080204