JBoss Netty1

はじめに

Javaで非同期I/Oプログラミングを行なうには、バージョン1.4から追加されたNIO(New I/O)を使用する。

NIOをラップした非同期フレームワーク「JBoss Netty」についてご紹介。

Javaでの同期I/O

Javaで同期I/Oを行なう場合、

java.ioパッケージの

  • InputStreamクラス
  • OutputStreamクラス
  • InputStreamReaderクラス
  • BufferedReaderクラス

または、java.netパッケージの

  • ServerSocketクラス
  • Socketクラス

を使う。

Javaでの非同期I/O

Javaで非同期I/Oを行なうには、Java1.4から実装されたjava.nioパッケージの

NIO API

を使う。

同期I/OとClock問題

同期I/Oを使ったサーバプログラム

public class SynchronousServer {
	public static void main(String[] args) throws Exception {
		// スレッドプールを作成する
		ExecutorService threadPool = Executors.newCachedThreadPool();
		// サーバソケットを作成し、8080番ポートにバインドする
		ServerSocket server = new ServerSocket(8080);
		while (true) {
			// クライアントの接続を受け付ける
			final Socket client = server.accept();
			// スレッドプールにクライアントの入出力処理を渡す
			threadPool.submit(new Runnable() {
				public void run() {
					// メソッド本体
					doSomeInputAndOutput(client);
				}
			});
		}
	}
}

シングルスレッドのままだと1度に1つのクライアントしか処理できないため、スレッドプールを使い、入出力処理をワーカスレッドに任せる。

スレッド数が1万を超えるとメモリ消費やコンテキストスイッチにパフォーマンス低下が著しく、サーバが不安定に。

同期I/Oのマルチスレッド方式がネックとなり、1台のサーバで大量の同時接続数を受け付けることが難しくなる。・・・C10K問題

非同期I/Oとイベント駆動モデル

NIOによる非同期型サーバプログラムの例

public class AsynchronousServer {
	public static void main(String[] args) throws Exeption {
		// サーバチャンネルを作成する
		ServerSocketChannel server = ServerSocketChannel.open();
		// ソケットを8080番ポートにバインドする
		server.socket().bind(new InetSocketAddress(8080));
		// チャネルをノンブロキングモードにする
		server.configureBlocking(false);
		// セレクタを作成する
		Selector selector = Selector.open();
		// セレクタを接続受け付け用に登録する
		server.register(selector, SelectionKey.OP_ACCEPT);

		while (true) {
			// I/O処理可能なチャネルを選択する
			selector.select();
			// I/O処理可能なチャネルのキー一覧を取得する
			Iterator keys = selectedKeys.iterator();
			while (keys.hasNext()) {
				SelectionKey key = keys.next();
				// 接続可能なキーの場合
				if (key.isAcceptable()) {
					// クライアントを受け付ける
					SocketChannel client = server.accept();
					if (client != null) {
						// チャネルをノンブロッキングモードにする
						client.configureClocking(false);
						// セレクタをクライアントからの読み込み用に登録する
						client.register(selector, SelectionKey.OP_READ);
					}
				}
				// 読み込み可能なキーの場合
				if (key.isReadable()) {
					// クライアントのチャネルを取得する
					SocketChannel client = (SocketChannel) key.channel();
					// クライアントの入出力処理を行なう
					doSomeAsyncInputAndOutput(client);
				}
				// キーを処理済みとして削除する
				keys.remove();
			}
		}
	}
}

非同期I/Oのソケット通信速度は同期I/Oに劣る。

Webplog中心で更新します

管理画面にアクセスするたびにWPのバージョンが上がる感じでした。。

サイトを放置するくらいだったら閉じたほうがいいんじゃない?とかとも思いましたが、最近日常に追われたり、ギターに追われたりしていておざなりになっていたWebプログラミング系のメモ系を更新してきたいと思います。

もちろん日常のことも合間に挟みつつ。

これまでこのサイトはブログ的な使い方をしておらず、固定ページを大量に生成するという作りにしていましたが、その辺も改めてページの整理やデザインの刷新も行いたいと思います。

音楽やらヲタ話はこれまで通り、ニコ動やTwitter中心で、こっちはまじめ系話アーカイブな感じにしようかなと。

生活リズム

1年かけて行なっていた陰陽座コピーという名のギター特訓に一区切りついたので、このサイトの更新を頑張ろうとおもいます。

サイトコンテンツの整理と作りかけのFEデータの続きを作りましょうそうしましょう。

久々に

生存報告も兼ねて。こっちは放置でしたがあっちはコンスタントに続けていました。こんなに1つのこと持続できているのは初めてかもしれません。。。気づけばYoutubeとニコ動で一番陰陽座動画を量産しておりました。あとTwitterは相変わらずな感じで。

東京来てからというものの、いろいろなことがめまぐるしくて「もーっ」て感じです。本当はちょっと前に記事を書こうとしていたんですが、WordPressアップグレードしたら投稿がおかしくなって次のバージョンアップを待ってましたという。。。やっと投稿できるようになった。。

FEは今の陰陽座シリーズが完了してからボチボチって感じです。まだまだやりたい曲はあるんですが、優先順位の問題で。

このサイトの扱う内容をどうしましょうかね。

  • FE:再度着手できるとすれば今年の10月くらいから
  • ツーリング:頻度激減したものの、たまに行ってます。引き続きレポしたい
  • WEB:WEB+DB PRESS流し読みをもう少し改善しよう。Programingの項目を今後は充実させたい

という感じで、しばらく更新頻度落ちるものの、マイペースでやってきます。

引っ越し

まさかまた東京砂漠に戻ることになるとは、、、、

ということで、来月引っ越しします?。現在物件吟味中。。。

ここ1ヶ月間くらいは怒涛の忙しさになりそうです。。。主に掃除と物の整理で。。目標は70%くらいのものは処分する感じで。

年の瀬

忘年会ラッシュなう な毎日ですが、ちゃんと働いています。

そして、ギターもまだ弾き続けています。やっぱりスケールの基礎ちゃんと勉強してよかったなぁと。曲覚える速度は確実に上がっていると思われます。

大好きな陰陽座のコピーはもうしばらく続きます。3ヶ月目突入で現在12/56曲。先は長い。。。

基本的に非リア充な生活を送っていますが、年末年始暇している者達が我が家のスチームオーブンレンジを完備したキッチン狙いで押しかけてくるので、期間限定的にリア充っぽくはなりますが、心は非リア充です。リア充の定義が何か違っている気もしますが。。。

今年の重点施策だったバイオリンと英会話はどうだったんでしょうね。前半半年は相当気合入れてバイオリンやってましたが、途中から陰陽座コピーにその座を奪われつつ。。。曲はまだまだカイザーを続けていくと思います。まずはクラシックからはじめたい。

英語もなんとか聞き続けていますが、復習が嫌いという本末転倒な心がけを矯正しないといけません。TOEICは引き続き半年スパンで受け続けるのと、やっぱりネイティブに教えを請おうかと。そして週末に復習の時間を鞭を打ってでも取る!!

来年の抱負として、引き続き陰陽座を前半年かけておこないます。FE動画はその後かな。。。ちょっと両立は時間的にも指体力的にもつらい。。

英語も引き続き。そして、先延ばしになっていたAndroid開発にいい加減に着手したいです。。今の端末からREGZA Phoneにしたいなぁぁ。ちょっと処理が重いですよ。

あとは料理です。地味にはまりました。もともとイタリアン系は作ってましたが、レンジが来てから和洋中製菓と幅が広がりました。人に言う度、作っている姿を想像できない的なコメントをもらいますが、結構まじめに取り組んでいます。来年も引き続きやっていきます!!

そして年末へ

もう12月間近とか信じられません。今年1年、悔いなく過ごせたのでしょうか。。。

最近はスチームオーブンレンジを買っちゃいまして、ほぼ毎日使っている今日この頃でございます。いやー、お菓子から麻婆豆腐までなんでもできちゃうんですねー。

相変わらずギターとバイオリンばかりしていて引き篭り生活に華が咲いていますが、まだ英語も続けているから大丈夫。きっと大丈夫。

長年連れ添ったiPodが遂にお亡くなりになり、買いなおすとなると出費がかさむんですが、ライカのデジカメも欲しくなっているからタチが悪いです。

やはり、、、

自作が一番という結論に数分考えて至りました。

新オフィシャルテーマ『とぅうぇんてぃいてん』をベースした子テーマ作ってガシャガシャやってみようと思います。

  • CSS修正(文字サイズを小さく)
  • 修練用ページを作り、地獄のメカニクルとカイザー系のコンテンツだけ新着とかがわかりやすくなるよう修正
  • ぱんくず追加

…あれ、これだけだったらすぐ行けそうな…。

あとは、最新のテーマの書き方をお手本から学ぶ、というとこでしょうか。

よーし!