加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何终止Scala Remote Actor客户端?

发布时间:2020-12-16 10:01:28 所属栏目:安全 来源:网络整理
导读:我正在和远程演员一起玩,但我遇到了一些困难. 考虑这个服务器: object Server { def main(args: Array[String]) { val server = new Server server.start }}class Server extends Actor { RemoteActor.alive(12345) RemoteActor.register('server,this) def
我正在和远程演员一起玩,但我遇到了一些困难.

考虑这个服务器:

object Server {
    def main(args: Array[String]) {
        val server = new Server
        server.start
    }
}

class Server extends Actor {
    RemoteActor.alive(12345)
    RemoteActor.register('server,this)

    def act() {
        while(true) {
            receive { case x => println(x) }
        }
    }
}

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

object Client {
    def main(args: Array[String]) {
        val server = RemoteActor.select(Node("localhost",12345),'server)
        server ! "Hey!"
    }
}

正如所料,服务器打印“嘿!”.

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

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

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

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

谢谢!

解决方法

不要从演员外部向其他演员发送消息.虽然Scala很乐意接受它,但正如你所看到的那样 has consequences.这是一个有效的等效代码:

import scala.actors.remote._

object Act extends scala.actors.Actor {
  def act = {
        val server = RemoteActor.select(Node("localhost",'server)
        server ! "Hey!"
  }
}

object Client {
    def main(args: Array[String]) {
      Act.start()
    }
}

或者,更简单地说,

import scala.actors.Actor.actor
import scala.actors.remote._

object Client {
    def main(args: Array[String]) {
      actor {
        val server = RemoteActor.select(Node("localhost",'server)
        server ! "Hey!"
      }        
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读