小编Rus*_*eks的帖子

使用Scala + Akka进行奇怪的尝试/捕获行为

我正在尝试使用Akka为自定义应用程序协议实现TCP服务器.我试图按照这里给出的例子:http://doc.akka.io/docs/akka/2.0/scala/io.html在for ... yield循环中进行非阻塞IO.

我发现当我从yield块中抛出异常时,我无法从块外部捕获它.我想我对Akka或Scala如何在这里工作有一个根本的误解,我会感激任何提示.

我把代码归结为:

import akka.actor._
import java.net.InetSocketAddress

class EchoServer(port: Int) extends Actor {

  val state = IO.IterateeRef.Map.async[IO.Handle]()(context.dispatcher)

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

  def receive = {
    case IO.NewClient(server) =>
      val socket = server.accept()
      state(socket) flatMap (_ => EchoServer.processRequest(socket))
    case IO.Read(socket, bytes) =>
      state(socket)(IO.Chunk(bytes))
    case IO.Closed(socket, cause) =>
      state(socket)(IO.EOF(None))
      state -= socket
  }
}

object EchoServer extends App
{
  def processRequest(socket: IO.SocketHandle): IO.Iteratee[Unit] =
  {
    println( "In process request")
    try { …
Run Code Online (Sandbox Code Playgroud)

scala exception akka

2
推荐指数
1
解决办法
1105
查看次数

如何使用Python Tornado构建一个线程安全的Request Handler

Tornado是否保证单个RequestHandler同时处理多少请求?我正在考虑像这样管理会话数据:

class MyHandler(tornado.web.RequestHandler):
  def prepare(self):
    self.session = load_session_from_memcached

  def get(self):
    # work with self.session

  def on_finish(self):
    save_session_to_memcached(self.session)
Run Code Online (Sandbox Code Playgroud)

但是,如果self.sessionin get()与the self.sessionin 相同,这只会起作用prepare().如果单个RequestHandler同时处理最多一个请求,那么这只会是真的.这是龙卷风的工作原理吗?

python tornado

2
推荐指数
1
解决办法
1054
查看次数

标签 统计

akka ×1

exception ×1

python ×1

scala ×1

tornado ×1