Scala 播放Websocket示例-只有一名Akka演员?

Scala 播放Websocket示例-只有一名Akka演员?,scala,playframework,playframework-2.0,akka,actor,Scala,Playframework,Playframework 2.0,Akka,Actor,在play框架提供的Websocket聊天示例中,在我看来只有一个参与者被创建/使用过;它还使用了“receive”,如果我理解得很好,它会强制参与者和线程之间的1:1映射,有效地使这个聊天服务器成为单线程的 请检查此处的代码: 这个分析是否正确?如果是,您是否有关于如何使此服务器具有高度可扩展性的指针?中有关于该示例中使用的WebSocket的默认dispatcher配置的一些详细信息 每个WebSocket连接状态都由代理参与者管理。为每个WebSocket创建一个新的参与者,并在套接字关闭

在play框架提供的Websocket聊天示例中,在我看来只有一个参与者被创建/使用过;它还使用了“receive”,如果我理解得很好,它会强制参与者和线程之间的1:1映射,有效地使这个聊天服务器成为单线程的

请检查此处的代码:

这个分析是否正确?如果是,您是否有关于如何使此服务器具有高度可扩展性的指针?

中有关于该示例中使用的WebSocket的默认dispatcher配置的一些详细信息

每个WebSocket连接状态都由代理参与者管理。为每个WebSocket创建一个新的参与者,并在套接字关闭时终止

该网页还显示默认配置:

websockets-dispatcher = {
  fork-join-executor {
    parallelism-factor = 1.0
    parallelism-max = 24
  }
}
默认情况下,所有Dispatcher都将在线程池上运行其参与者集。因此,对于每个创建websocket的客户端,都将创建一个参与者。分配多少线程取决于使用哪个执行器服务。看来
fork-join-executor
将根据需要创建线程,最高可达
parallelism max

除此之外,还有参与者处理行动和承诺


阿克卡似乎有许多旋钮来微调性能。看见使服务器“高度可扩展”可能需要大量的基准测试和一些硬件。

虽然websocket连接将有一个参与者池,但聊天室参与者仍然是唯一一个(单个参与者实例)对消息进行实际处理的人,管理连接/断开连接并充当套接字的路由器,这可能是此设计的瓶颈,因为参与者始终按顺序处理消息。我怀疑这个示例是否是为了可伸缩性,而是为了WebSocket的简单演示