我最近一直试图围绕Akka和基于演员的系统的概念.虽然我对Akka基本原理有很好的理解,但现在我仍然在集群和远程演员方面遇到一些问题.
我将尝试使用Play Framework 2.0附带的WebSocket聊天示例来说明问题:有一个持有WebSockets并保留当前连接用户列表的actor.演员基本上在技术上和逻辑上代表聊天室.只要在单个服务器上运行单个聊天室,这就完美无缺.
现在,我正在尝试理解当我们讨论在服务器群集上运行的许多动态聊天室(可以随时打开/关闭的新房间)时添加或删除单个节点时如何扩展此示例根据目前的需求).在这种情况下,用户A可以连接到服务器1,而用户B连接到服务器2.两者可能在同一个聊天室中进行通话.在每个服务器上仍然会有一个actor(对于每个聊天室?),它保存WebSocket实例以接收和发布事件(消息)给正确的用户.但从逻辑上讲,服务器1或服务器2上只应有一个聊天室角色,其中包含当前连接用户(或类似任务)的列表.
您将如何实现这一目标,最好是在"纯akka"中,而不添加ZeroMQ或RabbitMQ等额外的消息传递系统?
这是我到目前为止所提出的,请告诉我这是否有意义:
如果服务器2出现故障,则必须以某种方式在服务器2上重新创建/移动聊天室角色,尽管这不是我现在主要关注的问题.我最想知道演员如何在各种基本上独立的机器上进行动态发现,可以使用Akka的工具集来完成.
我一直在看Akka的文档很长一段时间了,所以也许我错过了这里显而易见的.如果是的话,请赐教:-)
Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")
Run Code Online (Sandbox Code Playgroud)
如果隐私为0,如何从此地图中删除数据.
Map(rel -> 2, privacy -> 0, status -> 1,name->"govind singh")
Run Code Online (Sandbox Code Playgroud) collections dictionary scala playframework scala-collections
我正在使用Play 2.0和Scala开发一个暴露一些REST API 的应用程序.这些API将由不同的应用程序,Web,移动或桌面使用,因此OAuth协议(OAuth2)似乎是最合适的.
此外,我最初会使用外部OAuth提供商,如Facebook.
我的问题是:授权单个REST调用的确切流程是什么?对于每次通话,我应该在服务器端期望什么以及我应该与外部提供商检查什么?
使用OAuth1我知道客户端发送了带有所有签名请求的令牌,但是我认为不是这样,我想如果签名没有签名是不可信的,因此我不认为这是流程.
我即将为一个应该在Tomcat服务器上运行的Web应用程序启动一个项目.我决定去Scala - 我工作的另一个替代方案是Groovy - 主要是为了类型安全.我现在面临着为工作选择合适工具的任务.
我需要开发的项目只能通过JSON API访问.它将与自己的数据库和两个外部服务进行交互,这两个服务分别公开JSON和XML API.我还需要能够安排定期作业,我的应用程序将使用这些外部服务执行各种同步任务.
对于数据库,我希望能够在Scala中定义我的模型并自动生成模式.如果需要更改我的模型,我希望有迁移来处理它.
对于这个应用程序,我试图评估Lift,Play!2和Scalatra.
电梯是我的第一选择.它是三个项目中最成熟的,似乎被认为是高度安全的(我不想在安全性上妥协).此外,它具有Scala中最好的JSON处理库.不过,在尝试了一下之后,我不确定这是不是正确的选择.文档并不是我见过的最好的文档.此外,Record + Squeryl在我看来比Mapper更好的抽象,但这种用途的文档更加稀缺.最后,尽管Lift当然可以用于创建Web服务,但它的真正优势似乎在于状态处理,因此我不相信我的项目需要额外的复杂性.
玩!2似乎有更好的文档,我看起来更熟悉(我来自Django背景).同样,它的默认数据库抽象并不能让我安心:ANORM依赖于SQL,这对类型检查没有帮助.无论如何我不得不使用Squeryl,我不确定这个用例的文档是否同样好.而且,部署Play!目前有2个应用程序比我想要的更复杂.一个人必须安装Play!在生产服务器上,我不确定这是我工作的选项.否则,有一个插件可以使它与servlets容器一起使用,但它是非常新的,我不确定它是多么稳定/可靠.
最后,可以选择使用Scalatra.Scalatra似乎很容易设置,它的设计完全是为了创建Web服务.折衷方案是Scalatra不提供太多功能.它不与现有ORM集成或建议如何组织应用程序的模型部分,它无助于设计cron或命令行任务.我也不确定该项目的长期未来.
您认为什么是我的任务的最佳选择?
我想在启动时运行一些代码来预先缓存一些东西,并且还想启动一个Timer来重新缓存Web请求的关键路径之外的一些东西.这是可以使用Play Framework,我把这个代码放在哪里?
我刚从Netbeans转到Eclipse.在Netbeans中,我可以开箱即用地调试Playframework应用程序.但是,在Eclipse中,为了调试Web应用程序(特定的Playframework应用程序),似乎很难配置它.
就像玩!文档,
主启动器只能与Run As eclipse命令一起使用.然后,您可以使用"调试为"连接"连接JPDA启动程序"以随时启动调试会话.停止调试会话不会停止服务器.
但是,我无法在"Debug As"(我正在使用Eclipse Classic 3.7.0)中看到"Connect JPDA launcher".我搜索过JPDA(我是Java的新手,不知道"主要启动器"和JPDA,然后在http://javarevisited.blogspot.com/2011/02/how-to中配置远程调试作为指示 -setup-remote-debugging-in.html 但是它返回了一个错误:
无法连接到远程VM.拒绝连接.连接被拒绝:连接
我搜索过并找到了一些建议:
1.)编辑catalina.bat并添加行:set JPDA_TRANSPORT = dt_socket ... set JPDA_ADDRESS = 8000 AND 2.)编辑startup.bat调用"%EXECUTABLE%"jpda start%CMD_LINE_ARGS%
实际上我并不清楚这一点,我想这是配置Tomcat.但是,我正在使用Play!默认服务器,检查application.conf并确保它正在侦听JPDA的端口9000和8000.
当然,我在调试之前启动了Play应用程序,我可以通过端口9000正常访问应用程序.我使用的是没有管理员权限的Win 7.
你有关于调试Play的详细指南吗?在Eclipse中?
跑步!使用Scala的应用程序.我正在做一个请求,其中响应应该是一个JSON字符串.检查调试器时,JsonElement将返回OK,其中包含所有预期的信息.但问题是当我尝试在JsonElement上实际运行方法时.
val json = WS.url("http://maps.googleapis.com/maps/api/geocode/json?callback=?&sensor=true&address=%s", startAddress+","+startCity+","+startProvince).get.getJson
val geocoder = json.getAsString
Run Code Online (Sandbox Code Playgroud)
我回来的唯一错误是Unsupported Operation Exception: null,我已经在尝试这样做getAsString,并getAsJsonObject与getAsJsonPrimitive
知道为什么它在所有方法上都失败了吗?谢谢.
我想知道else if在视图中是否支持2.0.3及更高版本?我只读过一个必须以这种方式编码:if {...}else{if{...}else{...}} 不能相信.
我想在Play/Scala应用程序中声明一个名为'type'的变量,因为我的数据有这个字段名,我正在使用JSON转换.它更有意义.
幸运的是,我可以重命名该字段,但仍然很好奇是否有一种方法可以使编译器在声明变量时忽略类型保留字.
我将使用Scala和Akka Actors开发新的HTTP/REST服务.
我有使用Play的经验,但我并不需要一个完整的Web框架.从我读到的,我认为Spray是一个合适的选择.在新到达的AKKA-HTTP之后,我的问题来自Spray的未来.
Spray项目是否会独立于Akka-HTTP项目而增长,还是两个项目将合并为一个Akka-HTTTP?
如果我开始用Spray开发,这有什么影响?另外我读到Play将集成AKKA-HTTP.所以我终于想知道是不是应该选择Play?
谢谢你的帮助.
playframework ×10
scala ×6
akka ×2
akka-cluster ×1
akka-http ×1
collections ×1
debugging ×1
dictionary ×1
eclipse ×1
gson ×1
lift ×1
oauth ×1
oauth-2.0 ×1
scalatra ×1
spray ×1