Apache httpcomponents を使用して、コメット スタイル (遅延応答) の http サーバーを実装しています。私のコードは、 http://hc.apache.org/httpcomponents-core-ga/examples.htmlの「基本的なノンブロッキング HTTP サーバー」の例と非常によく似ています。
コード例と同様に、DefaultServerIOEventDispatch と DefaultListeningIOReactor を使用してリクエストをディスパッチします。NHttpRequestHandler 内で、各リクエストの IP アドレスをログに記録したいと思います。
HttpRequestHandler 内では、HttpRequest、HttpResponse、および HttpContext にアクセスできます。NHttpRequestHandler には、NHttpResponseTrigger もあります。リクエストの送信元のリモート IP アドレスを取得するにはどうすればよいですか? 利用可能なオブジェクトでこれを行う方法がわかりません。
Update、これが私が最終的に使用したScalaコードです:
def getIp(context: HttpContext): Option[String] = {
val conn = context.getAttribute(ExecutionContext.HTTP_CONNECTION)
conn match {
case inet: HttpInetConnection =>
inet.getRemoteAddress match {
case sock: java.net.InetSocketAddress => // HttpComponents 4.1
Some(sock.getAddress.getHostAddress)
case adr: java.net.InetAddress => // HttpComponents 4.2
Some(adr.getHostAddress)
case unknown =>
Some(unknown.toString)
}
case _ => None
}
}
ご覧のとおり、HttpComponents 4.1 には追加の手順があります。