15 个版本 (6 个重大更改)
0.7.0 | 2019 年 2 月 10 日 |
---|---|
0.5.2 | 2018 年 12 月 5 日 |
0.5.1 | 2018 年 10 月 28 日 |
0.1.1 | 2018 年 7 月 27 日 |
在 #actix-actor 中排名第 28
每月下载量 30
在 torchbear 中使用
45KB
1K SLoC
actix-lua
使用 Lua 编程语言为 actix 提供安全的脚本环境
- 每个
LuaActor
都是一个独立的 Lua 虚拟机。 - 使用预定义的消息类型(如
String
、Integer
、Number
、Boolean
、Nil
和Table
)在演员之间进行通信。 - 使用 Lua 协程在演员之间异步发送
send
。
有关“安全性”的更多信息,请参阅 rlua 的 README。
概述
基本的 Lua 演员示例
extern crate actix_lua;
use actix_lua::{LuaActorBuilder, LuaMessage};
fn main () {
let addr = LuaActorBuilder::new()
.on_handle_with_lua(r#"return ctx.msg + 42"#)
.build()
.unwrap()
.start();
let res = addr.send(LuaMessage:from(100));
// return: 142
}
您可以使用 ctx.send
异步地向其他演员发送消息
struct Callback;
impl Actor for Callback {
type Context = Context<Self>;
}
impl Handler<LuaMessage> for Callback {
type Result = LuaMessage;
fn handle(&mut self, msg: LuaMessage, _ctx: &mut Context<Self>) -> Self::Result {
LuaMessage::String("hello".to_string())
}
}
let mut actor = LuaActorBuilder::new()
// create a new LuaActor from a lua script when the actor is started.
// send message to the newly created actor with `ctx.send`, block and wait for its response.
.on_started_with_lua(
r#"
local result = ctx.send("callback, "Hello")
print(result) -- print "hello"
"#).build()
.unwrap();
actor.add_recipients("callback", Callback.start().recipient());
actor.start();
安装
将 actix-lua
添加到您的 Cargo.toml
[dependencies]
actix-lua = "0.5"
示例
请查看 示例目录。
还有一篇关于使用 actix-lua 分析流数据的文章。 链接
Lua 演员示例
使用 LuaActor
将 Lua 脚本与您的系统集成到演员模型中。
消息
在演员模型中,演员通过消息进行通信。 LuaMessage
是 LuaActor
接受的唯一消息类型。
LuaMessage
可以使用LuaMessage::from()
转换为/从原始类型。- Lua 类型(例如数字、表)将自动转换为
LuaMessage
。
Lua API
注意:请勿在 Lua 脚本中声明全局变量。这可能会与未来的 actix-lua
更新冲突并破坏您的程序。
ctx.msg
发送给 Lua 演员的消息。
ctx.notify(msg)
向自身发送消息 msg
。
ctx.notify_later(msg,seconds)
在指定的时间后向自身发送消息 msg
。
local result=ctx.send(recipient,msg)
异步发送消息 msg
给 `recipient` 并等待响应。
相当于 actix::Recipient.send
。
ctx.do_send(recipient,msg)
向 recipient
发送消息 msg
。
相当于 actix::Recipient.do_send
。
ctx.terminate()
终止演员执行。
许可证
MIT许可证
依赖
约13MB
约218K SLoC