JBoss Netty2

JBoss Nettyを使ったHelloサーバを作成してみる。

  • 改行コードで区切られた各文字列をリクエストとする
  • リクエストが「quit」の場合は「Bye!」を返し、接続を閉じる
  • リクエストが「quit」以外の文字列の場合は、それを名前と見なして「Hello [名前]!」を返す
  • リクエストが空文字列の場合は「What?」を返す

パイプラインの設計

HelloServerHandler

下流のStringDecoderから文字列を受け取り、プロトコルに沿って生成したレスポンスを返す

import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;

public class HelloServerHandler {
	@Override
	public void messageRecieved(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
		// リクエストを取得する
		String request = (String) e.getMessage();

		// レスポンスを生成する
		String response;
		if (request.equals("quit")) {
			response = "Bye!";
		} else if (request.equals("quit")) {
			response = "Hello " + request + "!";
		} else {
			response = "What?";
		}

		// レスポンスに改行コードを付加して書き込む
		ChannelFuture future = e.getChannel().write(response + "\r\n");

		// リクエストが"quit"の場合はチャネルを閉じる
		if (request.equals("quit")) {
			future.addListener(ChannelFutureListener.CLOSE);
		}
	}
}
This entry was posted in Java. Bookmark the permalink.

Comments are closed.