问题标签 [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.

0 投票
2 回答
330 浏览

scala - 如何识别远程参与者?

我有一个远程参与者(客户端)正在向另一个远程参与者(服务器)注册,然后再取消注册(使用关闭挂钩)。但是,虽然服务器拿起了注销,但实际sender属性是不同的 Channel 对象;所以在我的服务器日志中我有:

Registered new client [scala.actors.Channel@158e282]; supporting 1 clients
De-registered client [scala.actors.Channel@1caf0b6]; supporting 1 clients

我如何确定(在服务器端)这是最初向我注册的同一个客户端参与者?显然我可以为每个客户灌输自己的UUID,但我想知道是否有更简单的方法?

0 投票
1 回答
631 浏览

scala - 如果尝试写入不再存在的客户端,远程参与者框架会做什么?

我有一台服务器,它使用远程参与者框架与多个客户端进行通信。正如这个问题中提到的,我无法跟踪客户何时消失。因此,我的服务器仍在尝试向不存在的客户端发送消息。

  • 这是一个问题吗?(我没有看到任何异常被抛出- 但我认为如果我的服务器寿命很长,会有内存问题)
  • 如何检测到消息正在发送给不再收听的客户端?(如果我想实现某种连接清理
0 投票
1 回答
296 浏览

scala - Scala 如何为案例类“填充”缺失的参数?

当我打电话时:

如何将其转换为以下结构:

特别是,当我从已被link编辑到远程(服务器)参与者的远程(客户端)参与者调用它时,服务器如何接收Exitfrom属性是参与者的实例:

基本上我想弄清楚如何处理这个远程客户端演员对象!

0 投票
2 回答
518 浏览

scala - 一个 Scala 远程演员异常

我使用这样的 scala 代码来进行回声服务。

导入 scala.actors.Actor 导入 scala.actors.Actor._ 导入 scala.actors.remote.RemoteActor._

但也有一些例外。

我不知道怎么会导致它。顺便说一句,我的 scala 版本是 2.7.5

0 投票
1 回答
458 浏览

scala - RemoteActor 注销演员

我在玩 RemoteActors。现在我想知道,如果我关闭 RemoteActor 会发生什么。演员通过 RemoteActor.alive 和 RemoteActor.register 可用。我找不到两者的倒数:活着和注册。

如何正确关闭 RemoteActor?

更新

为了让它更明显,我做了一个“小”的例子。以下 2 个程序均未终止,JVM 继续运行。所有用户创建的演员和主要演员都已完成。

A 的输出为:

对于 B 是:

调试器对 A Program 说,以下 4 个非守护线程仍在运行:

  • PlainSocketImpl.socketAccept
  • SocketInputStream.socketRead0
  • ForkJoinScheduler.liftedTree1
  • 销毁JavaVM
0 投票
1 回答
179 浏览

scala - RemoteActor.select - 结果确定性?

我想知道调用 val delegate = RemoteActor.select() 时是否有任何确定性。我问这个,因为我注意到当我通过网络发送代表时程序没有终止。

是否有任何其他副作用,取决于委托?

当 RemoteActor.select 将为相同的参数返回相同的委托时,是否有任何规则?

下面是一些演示 RemoteActor.select 问题的示例代码:

0 投票
1 回答
990 浏览

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 不会终止。(见马格努斯的回答)

程序员还应该注意其他陷阱吗?

0 投票
1 回答
1122 浏览

serialization - 为什么需要使用 Scala RemoteActors 设置类加载器?

使用 Scala RemoteActors 时,我得到了一个 ClassNotFoundException,它引用了 scala.actors.remote.NetKernel。我复制了别人的示例并添加RemoteActor.classLoader = getClass.getClassLoader到我的 Actor 中,现在一切正常。为什么这是必要的?

0 投票
3 回答
695 浏览

scala - 如何终止 Scala Remote Actor 客户端?

我正在玩远程演员,但我遇到了一些困难。

考虑这个服务器:

我写了一个简单的客户端:

正如预期的那样,服务器打印“嘿!”。

然而,出乎意料的是,客户端应用程序永远不会终止!

看起来客户端应用程序上已经启动了许多线程,但是在我的主函数完成后它们继续运行!

我可以做些什么来终止客户端应用程序?还有更多:如果我希望我的客户端能够启动和停止连接怎么办?我怎样才能做到这一点?

一些附加信息(基于回复):我使用的是 scala 2.8.0.final,我在这里谈论的是独立服务器和独立客户端。它们应该像$ scala Server和一样启动$ scala Client。我想要发生的是应用程序“客户端”应该完成,但它永远不会发生。

谢谢!

0 投票
2 回答
24955 浏览

serialization - 为什么案例对象可序列化而案例类不可序列化?

我正在使用这个示例http://scala.sygneca.com/code/remoteactors来了解远程参与者如何在 Scala (2.8.0) 中工作。特别是,我稍微修改了参与者发送的消息的定义方式,如下所示:

一切都按预期工作。不幸的是,如果我将事件定义为案例类而不是案例对象,如下所示:

我的例子停止工作。更详细地说,虽然案例对象是可序列化的,但案例类不是。实际上,当我尝试使用最后一次修改运行我的示例时,我得到以下异常:

案例对象可以序列化而案例类不能序列化是否有原因?有没有办法让我的示例与案例类一起使用?

编辑:正如 Victor 所建议并由 Aaron 确认的那样,我将伴随对象作为消息而不是类发送。此外,使用 javap 检查编译的代码很明显,虽然该类是可序列化的:

伴随对象不是:

现在的问题是:如何指定我想使用类而不是伴随对象?当我按照 Aaron 的建议发送消息时,我还添加了一对空括号,如下所示:

但没有任何改变。最后我还在案例类中添加了一个假参数

将消息发送为:

但仍然没有任何区别。有什么建议吗?