scala - 玩 Akka Actors 网络和非网络应用程序一起工作
问题描述
我创建了一个应用程序,该应用程序具有一起工作的 Web 服务器和 ssh 服务器。目前 SSH 服务器是在 Play 中运行的 Singleton。所以它是一个在后台运行 SSH 服务器的播放应用程序。
我希望 ssh 服务器不 100% 依赖于 Web 部件。它们可以在单独的服务器上运行以使其更容易扩展,这也很好。
由于我使用的是 Play(基于 Akka 构建),我认为 Actors 是一个不错的解决方案。但是这应该如何实施呢?
Web 和非 Web 部件都需要一些相同的类,例如:它们都需要具有User
可以在 2 个应用程序之间发送的类。这些必须通过演员发送。但是 web 和非 web 部件是不同的东西。
是否可以将 2 个项目构建为具有不同入口点的 1 个项目?这样我仍然可以使用相同的类,并且在通过actor发送时它们会正确序列化,因为它们完全相同。还是有不同/更好的方法?
我在 Play 文档https://www.playframework.com/documentation/2.6.x/SBTSubProjects中找到了此页面。但它是“先玩”,我希望这两个应用程序都能够单独运行。
解决方案
您可以查看多项目构建的sbt 文档
在您的build.sbt
文件中,您可以创建以下部分:
lazy val shared = (project in file("shared"))
lazy val ssh = (project in file("ssh"))
.dependsOn(shared)
lazy val http = (project in file("http"))
.enablePlugins(PlayScala)
.dependsOn(shared)
这样,您将拥有共享代码和分离的部分。您还可以添加另一个项目,将 ssh 和 http 部分聚合到一个项目中。
对于两部分之间的通信,您可以将 akka 与远程参与者一起使用
推荐阅读
- google-chrome-extension - Chrome 扩展:创建新标签并附加监听器
- sql - 在 SQL Server 存储过程结果中将日期转换为字符串
- numpy - 如何获取不在元组中的 nd.array 元素的索引
- swift - 从 SwiftUI 转到 UIKit 的另一个视图?
- javascript - 如何导入csv文件并在html表上显示数据然后保存在asp .net核心的sql数据库中
- python - 如何在 Glue python 作业脚本中表示类型编号的排序键
- typescript - 打字稿泛型-“扩展对象”毫无意义吗?最佳做法是什么?
- machine-learning - 根据调查答案将新学生与教练匹配使用哪种方法
- c++ - 如何将此memcpy转换为for?
- django - 从 django 中的查询集的所有对象中获取数据