2012-04-29 53 views
0

如何获取演员正在监听的端口?获取端口演员正在监听

我有以下代码

import scala.actors.Actor 
import scala.actors.Actor._ 
import scala.actors.remote.RemoteActor._ 

object DispatchActor extends Actor 
{ 
    def act() 
    { 
    alive(8888) 
    register('myService, self) 
    println("Listening on port " + howToGetPort) 

.. 

    } 
} 

我怎样才能打印该演员正在监听的端口?

第二个问题是关于调用alive()和register()方法。这些方法在RemoteActor对象中定义。如何在Actor对象上调用它们?

谢谢。

回答

1

我不认为Actor API可以让您知道某个特定Actor正在侦听哪个端口(现在我想起来有点类似于Java RMI),所以这种情况下的标准方法是记住您拨打alive时指定的端口。

就问题的第二部分而言,您没有调用Actor对象上的方法,您已经在对象定义的顶部从RemoteActor导入了相关定义 - 因此您可以编写您的代码是这样的:

import scala.actors.Actor 
import scala.actors.Actor._ 
import scala.actors.RemoteActor 

class DispatchActor(port: Int) extends Actor 
{ 
    def act() 
    { 
    RemoteActor.alive(port) 
    RemoteActor.register('myService, self) 
    println("Listening on port " + port) 
    } 
} 

请注意,我已将您的对象定义更改为类定义以允许它被参数化。

+0

有趣。那么我们可以在RemoteActor中将alive()和register()作为静态方法吗? – Nabegh 2012-04-30 18:52:39

+0

如果你来自Java-land,是的,有点。 Scala中的方法总是附加到一个对象上,这些实际上是单例对象RemoteActor上的方法。 – rxg 2012-04-30 18:58:43