「『足あとライブ!』に関するテクニカル・メモを書いてみた」に触発されて、Javaで書いてみました。
「足あとライブ!」に比べると機能は少ないですが、原理は実装してあります。
バイナリ
http://recompile.net/uploaded_files/comet-server-0.1-SNAPSHOT.zip
ソースコード
http://recompile.net/uploaded_files/comet-server-0.1-SNAPSHOT-src.zip
バイナリをダウンロード後、binフォルダにあるfootprint.batを実行してください。HTMLのサンプルはhtmlフォルダの中にあります。
さて、ここからはマニア向け。
これ、non-blocking I/Oの練習のために書きました。というのも、お恥かしい話、jettyやgrizzly、asyncwebなんかのソースを眺めていても、さっぱりわけがわからんという状態だったからです。NIOってむずかしいですよ。個々のAPIは理解できるのですが、実際のアプリケーションになると、パフォーマンスのためのチューニングとか、柔軟性のためのモジュール化とか、色々と工夫があって、理解しにくくなっています。なので、一回全体像を把握する必要があるかなと、自分で書いてみることにしたのです。
おかげで、non-blockingなサーバでやらなきゃいけないこと/やっていることがなんとなくつかめてきたかなって感じになりました。最近のウェブサーバは、ほとんどcomet対応を盛り込んできてますね。オープンソースの実装が色々とあるので、コードを眺めていこうかなっておもってます。
さて、資料が少ないNIOについてですが、今回参考にしたページなんかを紹介します。
とっかかりとしては、artonさんの記事がお勧めです。
http://codezine.jp/a/article/aid/358.aspx
NutshellにNIO本があります。コードが多めで読みやすいです。
| Java Nio | |
![]() | Ron Hitchens Oreilly & Associates Inc 2002-08-15 売り上げランキング : 12357 おすすめ平均 ![]() Amazonで詳しく見る by G-Tools |
grizzlyの中の人のブログはNIOについて濃い記事がいっぱいです。
http://weblogs.java.net/blog/jfarcand/archive/2006/05/tricks_and_tips_1.html
http://weblogs.java.net/blog/jfarcand/archive/2006/06/tricks_and_tips.html
http://weblogs.java.net/blog/jfarcand/archive/2006/07/tricks_and_tips_3.html
http://weblogs.java.net/blog/jfarcand/archive/2006/07/tricks_and_tips_4.html
http://weblogs.java.net/blog/jfarcand/archive/2006/09/tricks_and_tips_2.html



さっそくですね。"non-blocking I/O"はとても重要な概念で、一度はこうやって「自分のものにしておく」必要がありますおよね。スレッドとかプロセスをたくさん使うプログラムの中には、ちゃんと"non-blocking I/O"を理解した上で、そうしているのか疑問に思えるケースが良くあります。
コメントありがとうございます。
cometは目下、サーバでの対応がはじまったばかりですので、一般的なサービスに組み込まれるようになるまで、しばらくはかかるかと思います。
そのときは、こうした低水準の話は意識しなくても済むようになっているのでしょうが、とても良い勉強になりました。