Sunday 15 April 2012

akka - Scala Actor Based Web Server -



akka - Scala Actor Based Web Server -

im trying implement incredibly basic web server in scala, based on akka actors.

the issue having first request create on browser works fine, rest sporadic, loading browser page response 1 time again fine, not doing @ all. wondering if closing incorrectly or creating ton of free roaming actors never stop.

relevant code:

def starthttpserver(port: int) = { seek { val scheme = actorsystem("basicserversystem") val requestactor = system.actorof(props[httprequestactor], name = "requestactor") val server = new serversocket(port) logger.info(s"basicserver listening on port $port") while (true) { val socket = server.accept() requestactor ! socket } } grab { case e: exception => logger.error(e.getmessage) } } class httprequestactor extends actor { final val logger = logger.createlogger(classof[httprequestactor]) override def receive: receive = { case sock: socket => seek { val requestid = java.util.uuid.randomuuid.tostring val responseactor = context.actorof(props[httpresponseactor], name = s"responseactor$requestid") responseactor ! sock } grab { case e: exception => logger.error(e.getmessage) } } } class httpresponseactor extends actor { final val logger = logger.createlogger(classof[httpresponseactor]) override def receive: actor.receive = { case sock: socket => seek { val out = new printstream(sock.getoutputstream) val date = new date() out.println("received on " + date) out.close() } grab { case e: exception => logger.error(e.getmessage) } { sock.close() } } }

also of note, not sure of close socket. on right track here, or terrible utilize case actors?

you responding new tcp sessions , not new http requests. since browsers cache tcp sessions, may not receive new socket connection every time send new request. when start new browser instance, new socket connection , can respond (as have noticed). when refresh existing browser, whether new tcp session gets opened or not depends on timeouts in browser.

scala akka

No comments:

Post a Comment