Theater:iOSActor模型框架
编写异步、健壮和响应式的应用程序太难了。
在iOS的情况下,是因为我们使用错误的抽象级别:NSOperationQueues、dispatch_semaphore_create、dispatch_semaphore_wait以及其他低级别的GCD函数和结构。
使用Actor模型,我们提高了抽象级别,并为构建正确的并发和可伸缩的应用程序提供了一个更好的平台。
Theater是开源的,并使用Apache 2许可证。
Theater深受Akka的启发。
Twitter = @TheaterFwk
如何开始
- 通过CocoaPods安装
pod 'Theater'
Actor应该继承自Actor类
public class Dude : Actor {
为了“监听”消息,Actor需要重写receive方法
override public func receive(msg : Message) -> Void {
}
为了解包消息,可以使用switch语句
override public func receive(msg : Message) -> Void {
switch (msg) {
case let m as Hi:
m.sender! ! Hello(sender: self.this)
case is Hello:
print("got Hello")
default:
print("what?")
}
}
所有消息都必须继承自Message
public class Hi : Message {}
public class Hello : Message {}
Actor生活在actor系统中,Theater提供了一个默认的系统
let system : ActorSystem = AppActorSystem.shared
整合在一起
import Theater
public class Hi : Message {}
public class Hello : Message {}
public class Dude : Actor {
override public func receive(msg : Message) -> Void {
switch (msg) {
case let m as Hi:
m.sender! ! Hello(sender: self.this)
case is Hello:
print("got Hello")
default:
print("what?")
}
}
}
.
.
.
(inside the app delegate)
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let system : ActorSystem = AppActorSystem.shared
let dude1 = system.actorOf(Dude.self, name: "dude1")
let dude2 = system.actorOf(Dude.self, name: "dude2")
dude2 ! Hi(sender : dude1)
输出将是
Tell = Optional("dude1") <Actors.Hi: 0x7bf951a0> dude2
Tell = Optional("dude2") <Actors.Hello: 0x7be4bc00> dude1
got Hello