【问题标题】:Play is asynchronous or non-blocking frameworkPlay 是异步或非阻塞框架
【发布时间】:2017-05-23 11:14:23
【问题描述】:

我已经阅读了几篇教程,并且到处都提到了“非阻塞”游戏。我很困惑,说非阻塞是指异步还是非阻塞 I/O。

根据我的理解,当在播放服务器上收到任何 http 请求时,它会分配一个专用线程来处理该请求并保持该线程直到它返回响应。那么它是如何非阻塞的呢?

异步是否意味着主线程可以生成一个新线程并将其工作委托给它并运行下一条语句? (为此我们需要使用 akka)

【问题讨论】:

  • 好吧,它没有分配专用线程。你在哪里读到的?
  • 我在我的项目中使用 play 并且我在工作时观察到的是,除非没有返回响应,否则线程正在等待。我们正在调用外部服务,在该外部服务给出响应之前,线程保持阻塞状态。

标签: multithreading asynchronous playframework akka nonblocking


【解决方案1】:

要理解这一点,您需要了解 scala 中的 Futures 是如何工作的。期货不会停止程序的执行。所有期货都是非阻塞的。我建议您阅读此内容:http://docs.scala-lang.org/overviews/core/futures.html

因为 play 的异步库是建立在 Scala 的 Futures 之上的。一旦你完成了这些,你将有足够的知识来回答你自己的问题。此外,如果您需要更多关于如何在游戏中使用期货的信息,请阅读此内容:

https://www.playframework.com/documentation/2.5.x/ScalaAsync

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2017-09-10
    • 2013-05-07
    • 2015-05-04
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多