Scala Actor + HttpServer
Scala で 簡易的な httpd を作れないかと調べていたら、Java に HttpServer という便利なクラスがあった。
handler は、Actor 上で使いたいので Executor を継承した ActorExecutor というのを作ってみた。
import java.net.InetSocketAddress import java.util.concurrent.Executor import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer} import scala.actors.Actor.actor class ActorExecutor extends Executor { def execute(r: Runnable) { println("Start execute") println("execute thread: " + Thread.currentThread.getName) actor {r.run} println("End execute") } } object SimpleHttpd { def main (args: Array[String]) { val handler = new HttpHandler { def handle(exchange: HttpExchange) { println("Start handle") println("handle thread: " + Thread.currentThread.getName) val out = exchange.getResponseBody exchange.sendResponseHeaders(200, 0) out.write("Handling that just works.".getBytes) out.close println("End handle") } } val server = HttpServer.create(new InetSocketAddress(9000), 0) server.createContext("/", handler) val exec = new ActorExecutor() server.setExecutor(exec) server.start println("main thread: " + Thread.currentThread.getName) } }