## Actix - Rust 的Actor异步并发框架
### [actix](https://github.com/actix)
### [官网](https://actix.rs/)
Actix 基于Tokio和Future,开箱具有异步非阻塞事件驱动并发能力,其实现低层级Actor模型来提供无锁并发模型,而且同时提供同步Actor,具有快速、可靠,易可扩展。
Actix之上是高性能Actix-web框架,很容易上手。使用Actix-web开发的应用程序将在本机可执行文件中包含HTTP服务器。你可以把它放在另一个像nginx这样的HTTP服务器上。但即使完全不存在另一个HTTP服务器(像nginx)的情况下,Actix-web也足以提供HTTP 1和HTTP 2支持以及SSL/TLS。这对于构建微服务分发非常有用。
### 特性:
- 异步/同步 actors
- Actor 在本地/线程上下文中通信
- 使用 Futures 进行异步消息处理
- 支持 HTTP1/HTTP2(actix-web)
- Actor 监控
- 类型化消息 (No Any type)
### 示例
```go
extern crate actix;
extern crate futures;
use futures::Future;
use actix::prelude::*;
struct MyActor {
count: usize,
}
impl Actor for MyActor {
type Context = Context<Self>;
}
struct Ping(usize);
impl Message for Ping {
type Result = usize;
}
impl Handler<Ping> for MyActor {
type Result = usize;
fn handle(&mut self, msg: Ping, ctx: &mut Context<Self>) -> Self::Result {
self.count += msg.0;
self.count
}
}
fn main() {
let system = System::new("test");
// start new actor
let addr = MyActor{count: 10}.start();
// send message and get future for result
let res = addr.send(Ping(10));
Arbiter::spawn(
res.map(|res| {
# System::current().stop();
println!("RESULT: {}", res == 20);
})
.map_err(|_| ()));
system.run();
}
```
<a href="/user/whutchao" title="@whutchao">@whutchao</a> golang都是用语言自带的协程模式吧,Actor模型见的少,值得探索
#4
更多评论
<a href="/user/whutchao" title="@whutchao">@whutchao</a> 基于Actix 的Actix-web生产用户报告:多并发请求HTTP有1M req/s(每秒超过100万)
#2