Scala удаленные актеры - PullRequest
       32

Scala удаленные актеры

17 голосов
/ 12 февраля 2009

Существуют ли какие-либо руководства или руководства, которые объясняют возможность удаленного использования актеров scala? Все, что я нашел до сих пор, это один пример (без комментариев), но этого едва ли достаточно.

Ответы [ 6 ]

10 голосов
/ 19 марта 2009

Я написал статью с примером приложения, чтобы объяснить использование Remote Actors немного назад.

Ну, внутри кода нет комментариев (возможно, вы даже имели в виду эту статью), но под кодом есть объяснения.

3 голосов
/ 10 марта 2009

Просто будьте осторожны, отправляя сообщения, которые можно сериализировать (классы дел и объекты дел!) И убедитесь, что противоположная сторона может создать класс. Следите за пользовательскими загрузчиками классов или отсутствующими JAR-файлами в ваших classpath.

1 голос
/ 21 июля 2011

Может быть, это некропост, но я искал все и не мог найти много. Надеюсь, это кому-нибудь поможет.

Я использую Mac OS 10.6.8 и Scala 2.9.0.1 . У меня были проблемы с запуском примера канонических удаленных актеров. Я получил следующий код.

Примечание: Метод clear предназначен только для предотвращения накопления сообщений. Это не критично для примера. Аналогично, вызовы Thread.sleep просто для того, чтобы было проще увидеть, что происходит во время выполнения.

Скомпилируйте его, затем в отдельных экземплярах оболочки выполните:

$> scala Ping

и

$> scala Pong

в любом порядке. Вы можете экспериментировать, убивая одного из них за раз и отслеживая код.

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

/** @author Connor Doyle */

// Remote messages must be serializable.
// The easist way to do this is to wrap
// them with a case class
case class Message(text: String)

abstract class PingPongActor extends Actor with App {
    val pingPort = 9000
    val pongPort = 9001
    val delay = 1000
    classLoader = getClass().getClassLoader() // hack!
    start

    // this method consumes all pending messages
    // the library should have implemented an atomic 
    // receiveAndClear operation
    def clear: Unit = receiveWithin(0) {
        case TIMEOUT => ()
        case _ => clear
    }
}

object Ping extends PingPongActor {

    // result of select already lazy, but explicit lazy conveys
    // semantics clearly
    lazy val pong = select(Node("localhost", pongPort), 'pong)

    def act = {
        alive(pingPort)
        register('ping, self)
        loop {
            pong ! Message("ping")
            receiveWithin(delay * 2) {
                case Message(text: String) => {
                    clear
                    println("received: "+text)
                    Thread.sleep(delay) // wait a while
                }
                case TIMEOUT => println("ping: timed out!")
            }
        }
    }
}

object Pong extends PingPongActor {

    lazy val ping = select(Node("localhost", pingPort), 'ping)

    def act = {
        alive(pongPort)
        register('pong, self)
        loop {
            receiveWithin(delay * 2) {
                case Message(text: String) => {
                    println("received: "+text)
                    Thread.sleep(delay) // wait a while
                    clear
                    ping ! Message("pong")
                }
                case TIMEOUT => println("pong: timed out")
            }
        }
    }
}

Ура!

1 голос
/ 02 декабря 2010

недавно на первой странице www.scala-lang.org было добавлено руководство, вот ссылка http://www.scala -lang.org / доку / файлы / актеры-апи / actors_api_guide.html #

1 голос
/ 21 июля 2010

Каркас Akka имеет удаленных актеров . API очень похож на обычных актеров scala.

Они также обеспечивают некоторый уровень автоматической кластеризации, но он еще не завершен.

1 голос
/ 12 февраля 2009

Ничего из того, что я знаю. Это в значительной степени подход "взломать свой путь через джунгли". Судя по API, все должно работать так же, как и у обычных актеров, для которых существует один или два учебника (а также несколько книг).

Если вы используете удаленных актеров, мы (сообщество), безусловно, приветствуем такое руководство от опытного пользователя!

...