问题标签 [remote-actors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 如何识别远程参与者?
我有一个远程参与者(客户端)正在向另一个远程参与者(服务器)注册,然后再取消注册(使用关闭挂钩)。但是,虽然服务器拿起了注销,但实际sender
属性是不同的 Channel 对象;所以在我的服务器日志中我有:
Registered new client [scala.actors.Channel@158e282]; supporting 1 clients
De-registered client [scala.actors.Channel@1caf0b6]; supporting 1 clients
我如何确定(在服务器端)这是最初向我注册的同一个客户端参与者?显然我可以为每个客户灌输自己的UUID
,但我想知道是否有更简单的方法?
scala - 如果尝试写入不再存在的客户端,远程参与者框架会做什么?
我有一台服务器,它使用远程参与者框架与多个客户端进行通信。正如这个问题中提到的,我无法跟踪客户何时消失。因此,我的服务器仍在尝试向不存在的客户端发送消息。
- 这是一个问题吗?(我没有看到任何异常被抛出- 但我认为如果我的服务器寿命很长,会有内存问题)
- 如何检测到消息正在发送给不再收听的客户端?(如果我想实现某种连接清理)
scala - Scala 如何为案例类“填充”缺失的参数?
当我打电话时:
如何将其转换为以下结构:
特别是,当我从已被link
编辑到远程(服务器)参与者的远程(客户端)参与者调用它时,服务器如何接收Exit
到from
属性是参与者的实例:
基本上我想弄清楚如何处理这个远程客户端演员对象!
scala - 一个 Scala 远程演员异常
我使用这样的 scala 代码来进行回声服务。
导入 scala.actors.Actor 导入 scala.actors.Actor._ 导入 scala.actors.remote.RemoteActor._
但也有一些例外。
我不知道怎么会导致它。顺便说一句,我的 scala 版本是 2.7.5
scala - RemoteActor 注销演员
我在玩 RemoteActors。现在我想知道,如果我关闭 RemoteActor 会发生什么。演员通过 RemoteActor.alive 和 RemoteActor.register 可用。我找不到两者的倒数:活着和注册。
如何正确关闭 RemoteActor?
更新
为了让它更明显,我做了一个“小”的例子。以下 2 个程序均未终止,JVM 继续运行。所有用户创建的演员和主要演员都已完成。
A 的输出为:
对于 B 是:
调试器对 A Program 说,以下 4 个非守护线程仍在运行:
- PlainSocketImpl.socketAccept
- SocketInputStream.socketRead0
- ForkJoinScheduler.liftedTree1
- 销毁JavaVM
scala - RemoteActor.select - 结果确定性?
我想知道调用 val delegate = RemoteActor.select() 时是否有任何确定性。我问这个,因为我注意到当我通过网络发送代表时程序没有终止。
是否有任何其他副作用,取决于委托?
当 RemoteActor.select 将为相同的参数返回相同的委托时,是否有任何规则?
下面是一些演示 RemoteActor.select 问题的示例代码:
scala - Scala Remote Actors - 陷阱
在编写 Scala RemoteActor 代码时,我注意到了一些陷阱:
- 必须设置 RemoteActor.classLoader = getClass().getClassLoader() 以避免“java.lang.ClassNotFoundException”
- 由于“支持远程参与者的 NetKernel(负责远程转发消息的设施)可以在远程参与者的代理(更具体地说,代理委托)有机会发送之前关闭的竞争条件,链接并不总是有效远程指示本地出口的消息。” (斯蒂芬·图)
- RemoteActor.select 并不总是返回相同的委托(RemoteActor.select - 结果确定性?)
- 通过网络发送委托会阻止应用程序正常退出(RemoteActor unregister actor)
- 如果 RemoteActor.alive() 和 RemoteActor.register() 在动作之外使用,远程 Actor 不会终止。(见马格努斯的回答)
程序员还应该注意其他陷阱吗?
serialization - 为什么需要使用 Scala RemoteActors 设置类加载器?
使用 Scala RemoteActors 时,我得到了一个 ClassNotFoundException,它引用了 scala.actors.remote.NetKernel。我复制了别人的示例并添加RemoteActor.classLoader = getClass.getClassLoader
到我的 Actor 中,现在一切正常。为什么这是必要的?
scala - 如何终止 Scala Remote Actor 客户端?
我正在玩远程演员,但我遇到了一些困难。
考虑这个服务器:
我写了一个简单的客户端:
正如预期的那样,服务器打印“嘿!”。
然而,出乎意料的是,客户端应用程序永远不会终止!
看起来客户端应用程序上已经启动了许多线程,但是在我的主函数完成后它们继续运行!
我可以做些什么来终止客户端应用程序?还有更多:如果我希望我的客户端能够启动和停止连接怎么办?我怎样才能做到这一点?
一些附加信息(基于回复):我使用的是 scala 2.8.0.final,我在这里谈论的是独立服务器和独立客户端。它们应该像$ scala Server
和一样启动$ scala Client
。我想要发生的是应用程序“客户端”应该完成,但它永远不会发生。
谢谢!
serialization - 为什么案例对象可序列化而案例类不可序列化?
我正在使用这个示例http://scala.sygneca.com/code/remoteactors来了解远程参与者如何在 Scala (2.8.0) 中工作。特别是,我稍微修改了参与者发送的消息的定义方式,如下所示:
一切都按预期工作。不幸的是,如果我将事件定义为案例类而不是案例对象,如下所示:
我的例子停止工作。更详细地说,虽然案例对象是可序列化的,但案例类不是。实际上,当我尝试使用最后一次修改运行我的示例时,我得到以下异常:
案例对象可以序列化而案例类不能序列化是否有原因?有没有办法让我的示例与案例类一起使用?
编辑:正如 Victor 所建议并由 Aaron 确认的那样,我将伴随对象作为消息而不是类发送。此外,使用 javap 检查编译的代码很明显,虽然该类是可序列化的:
伴随对象不是:
现在的问题是:如何指定我想使用类而不是伴随对象?当我按照 Aaron 的建议发送消息时,我还添加了一对空括号,如下所示:
但没有任何改变。最后我还在案例类中添加了一个假参数
将消息发送为:
但仍然没有任何区别。有什么建议吗?