2012-06-14 79 views
2

具有簡單阿卡HTTP服務器:停止阿卡HTTP服務器

package org.package.some 

import akka.actor.{IOManager, IO, Actor} 
import java.net.InetSocketAddress 

class HttpServerActor extends Actor {  
    val state = IO.IterateeRef.Map.async[IO.Handle]()(context.dispatcher) 

    override def preStart() { 
    IOManager(context.system) listen new InetSocketAddress(8000) 
    } 

    def receive = { 
    case IO.NewClient(server) => 
     val socket = server.accept() 
     state(socket) flatMap (_ => RequestProcessor.processRequest(socket)) 

    case IO.Read(socket, bytes) => 
     state(socket)(IO Chunk bytes) 

    case IO.Closed(socket, cause) => 
     state(socket)(IO EOF None) 
     state -= socket 

    case "STOP" => 
     println("WHAT'S HERE??") 
    } 
} 

一個如何將停止服務器,即接近服務器插槽上的8000端口?

就殺演員沒有任何效果:仍然在netstat -a | grep 8000行說,端口仍在聆聽。

回答

3

IOManager.listen返回ServerHandle,其具有close方法。

class HttpServerActor extends Actor { 
    val state = IO.IterateeRef.Map.async[IO.Handle]()(context.dispatcher) 
    var handle: ServerHandle = _ 

    override def preStart() { 
    handle = IOManager(context.system) listen new InetSocketAddress(8000) 
    } 

    def receive = { 
    // ... 
    case "STOP" => 
     handle.close() 
    } 
} 
+0

謝謝! ('SocketHandle'應該被替換爲'ServerHandle') – nab

+0

完成。從錯誤的方法複製/粘貼:-) – leedm777