¿Hay guías o tutoriales que expliquen la posibilidad de utilizar scala actors de forma remota? Todo lo que he encontrado hasta ahora es un ejemplo (sin comentarios) pero eso no es suficiente.Scala remote actors
Respuesta
He escrito an article with an example app to explain the use of Remote Actors hace un tiempo.
Bueno, no tiene comentarios dentro del código (tal vez incluso quiso decir ese artículo), pero hay explicaciones debajo del código.
Hay otro ejemplo nuevo basado en mi código pero más simple y establece el classpath de forma manual, lo que evita problemas: http : //youshottheinvisibleswordsman.co.uk/2009/04/01/remoteactor-in-scala/ – dmeister
dmeister ¿Qué pasó con tu blog? –
Parece que tu enlace no funciona.¿Podría arreglarlo, así como parafrasear lo que está vinculando para que la información se mantenga válida en caso de que el enlace muera nuevamente? –
Ninguno de los que tengo conocimiento. Es más o menos un enfoque de "atraviesa la jungla". Sin embargo, a juzgar por la API, las cosas deberían funcionar más o menos igual que los actores regulares, para lo cual existen uno o dos tutoriales (así como algunos libros ahora).
Si utiliza actores remotos, ¡nosotros (la comunidad) sin duda daríamos la bienvenida a este tipo de tutoriales a un usuario experimentado!
Solo tenga cuidado de enviar mensajes que sean serializables (¡las clases de casos y los objetos son!) Y asegúrese de que el lado opuesto pueda crear la clase. Tenga cuidado con ClassLoaders personalizados o JAR faltantes en sus classpaths.
El marco de Akka tiene remote actors. La API es bastante similar a los actores Scala regulares.
Proporcionan cierto nivel de agrupamiento automático también, pero no está completo.
hace poco no existía una guía añadido en la primera página de www.scala-lang.org, aquí está el enlace http://www.scala-lang.org/docu/files/actors-api/actors_api_guide.html#
Tal vez este es un necropost pero yo estaba buscando por todas partes y no podía encontrar mucho . Espero que esto ayude a alguien.
Estoy ejecutando Mac OS 10.6.8 y Scala 2.9.0.1. Tuve problemas para ejecutar el ejemplo canónico de actores remotos. Terminé con el siguiente código.
Nota: El métodoclara es sólo para evitar que los mensajes se acumulen. No es crítico para el ejemplo. Del mismo modo, las llamadas a Thread.sleep son simplemente para que sea más fácil ver lo que está sucediendo en el tiempo de ejecución.
compilarlo, a continuación, en los casos de concha separadas hacen:
$> scala Ping
y
$> scala Pong
en cualquier orden. Puedes experimentar matando a uno de ellos a la vez y rastreando el código.
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")
}
}
}
}
¡Salud!
En retrospectiva, después de haber usado actores para construir un sistema, una operación de "recepción atómica y clara" en la mayoría de los casos sería una idea terrible. –
- 1. Scala actors - peores prácticas?
- 2. scala actors vs hilos y bloqueo IO
- 3. scala actors: long running io operations
- 4. application.conf para Scala SBT Akka Actors
- 5. a scala remote actor excepción
- 6. Enlace variable Scala cuando se usa con Actors
- 7. Usando Scala Actors para crear algo así como un Pipeline
- 8. ¿Qué hace la función "eventloop" en Scala Actors?
- 9. Composing actors
- 10. ¿Cómo se implementa el buzón (cola de mensajes) en Scala Actors?
- 11. ¿Qué sucede cuando utilizamos loop en lugar de while (true) con scala actors?
- 12. Referencia de patrón canónico en el modelo de programación Actors
- 13. ¿Cómo iniciar Akka Actors desde 2.0?
- 14. git initialize remote repo
- 15. Qt Creator remote debugger
- 16. Apache Cassandra remote access
- 17. git add remote branch
- 18. Git- Tracking remote branches
- 19. Eclipse Perl Remote Execution
- 20. JBoss JMS Remote Queue?
- 21. EventLogReader Remote Performance
- 22. UIAutomation and Remote Desktop Connections
- 23. mathica remote kernel en macs
- 24. C# Command Run remote System
- 25. Git. Remote HEAD es ambiguo
- 26. empujando a git remote branch
- 27. Secuencia de envío de mensajes en akka actors
- 28. cómo limpiar mi actor muerto en Scala
- 29. Cómo deshabilitar Flash en selenium remote webdriver
- 30. ¿Cómo desactivar Windows Remote-Desktop con Powershell?
Documentación reciente: http://docs.scala-lang.org/overviews/core/actors.html#remote_actors – ekillaby