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);
}
}
}