当前位置: 首页 > 软件库 > Web应用开发 > >

Actix

Rust 的 actors 框架
授权协议 MIT
开发语言 Rust
所属分类 Web应用开发
软件类型 开源软件
地区 不详
投 递 者 司马渝
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Actix - Rust 的Actor异步并发框架

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)

示例 

extern crate actix;extern crate futures;extern crate tokio;use actix::prelude::*;use futures::Future;/// Define `Ping` messagestruct Ping(usize);impl Message for Ping {    type Result = usize;}/// Actorstruct MyActor {    count: usize,}/// Declare actor and its contextimpl Actor for MyActor {    type Context = Context;}/// Handler for `Ping` messageimpl Handlerfor MyActor {    type Result = usize;    fn handle(&mut self, msg: Ping, _: &mut Context) -> Self::Result {        self.count += msg.0;        self.count    }}fn main() {    // start system, this is required step    System::run(|| {        // start new actor        let addr = MyActor { count: 10 }.start();        // send message and get future for result        let res = addr.send(Ping(10));        // handle() returns tokio handle        tokio::spawn(            res.map(|res| {                println!("RESULT: {}", res == 20);                // stop system and exit                System::current().stop();            }).map_err(|_| ()),        );    });}

 

  • 十一、Actix-web 拦截器中间件      在编写 web 项目时,对于登录状态,或权限的 “拦截器” 是必不可少的,本节我们来看看 actix-web 中对 http 的请求的策略拦截。      actix-web 中的 “拦截器” 是通过 middleware 来实现的。首先来定义一个中间件,其中大部分为模板代码,从 actix-web 的 middleware 源中都可以找到。最重要

  • 概览 一个功能增大,实用的并且非常快的Rust web框架 类型安全 忘记字符串对象,从请求到响应,一切都有类型. 丰富特性 Actix 提供很多开箱即用的特性.HTTP/2,logging,等 可扩展 非常容易创建你自己类库,任何Actix 应用都可以使用. 非常快 Actix 非常快.不需要用语言来说 – 你自己来看. use actix_web::{web, App, HttpRequest

  • 本教程笔记来自 杨旭老师的 rust web 全栈教程,链接如下: https://www.bilibili.com/video/BV1RP4y1G7KF?p=1&vd_source=8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bilibili.com/video/BV

  • 本文代码 https://github.com/tothis/rust-record/tree/main/test/actix-web 已集成功能 log4rs 集成 SQLx 集成 Actix Web CRUD Cargo.toml [package] name = "actix-web-record" version = "0.1.0" authors = ["Li Lei <this.lil

  • 前言 本后端项目用到的技术栈主要包括: Actix Web框架; Log 日志库; Serde 序列化; SnowFlake Id生成; dotenv 获取环境配置; MongoDB 存取; lazy_static 全局静态初始化; ELO 算法; 使用 Pre-Commit 在 Git Commit 前进行校验; 使用 Github Action 进行 CI; 使用中间镜像对代码进行编译并创建部

 相关资料
  • Actor模型为编写并发和分布式系统提供了一种更高的抽象级别。它将开发人员从显式地处理锁和线程管理的工作中解脱出来,使编写并发和并行系统更加容易。Actor模型是在1973年Carl Hewitt的论文中定义的,不过直到被Erlang语言采用后才变得流行起来,一个成功案例是爱立信使用Erlang非常成功地创建了高并发的可靠的电信系统。 Akka Actor的API与Scala Actor类似,它们

  • 作为一个新手,我正在努力理解演员是如何工作的。从文档中,我想我理解了actor是在同步模式下执行的对象,并且actor执行可以包含阻塞/sync方法调用,例如db请求 如果是这种情况,那么执行非阻塞/异步调用的推荐方法是什么呢?比方说一个web服务调用,它获取一些东西并在请求完成时向另一个参与者发送消息?我们是否应该简单地在actor中使用以下内容: 未来映射{response=>x!respon

  • 不能使用构造函数(new)显式创建[org.quadrisk.TopLogy.TenderEventspout2]的实例。您必须使用“actor of”工厂方法之一来创建新的actor。请参阅文档。 但是按照建议使用actorOf创建一个actor,会返回一个ActorRef类型的对象。我该怎么做。提前道谢。

  • 我只想使用Akka演员作为邮箱,即我想创建n个线程,每个线程创建1个远程演员。 每个线程都获得对其他线程的所有远程参与者的引用,这样它们就可以通过各自的参与者向彼此发送消息。 参与者定义如下: 其中是对该线程的本地参与者的引用。 我有时会遇到上述模式的死锁(超时5秒),即使使用非常简单的方法和很小的消息也是如此。我将问题缩小到actors在收到消息后,但在输入doReceive(...)的第一个大

  • 嘿,希望有人能帮我一下。 我正在尝试使用Scala Actors和 Netty.io 库来获取异步http请求。(是的,我知道Scala演员正在被弃用,但这对我来说是一个学习练习) 我编写了一个角色,它接受案例类Request Page(uri: URI)形式的消息。 当它接收到消息时,它创建了必要的Netty对象,需要发出超文本传输协议请求,我已经基于来自[](http://static.net

  • 当涉及到在akka HTTP上使用60+API创建REST web服务时。我如何选择我应该和akka溪流还是akka演员一起去?在他的文章中,Jos展示了在akka http上创建API的两种方法,但他没有展示我应该在什么时候选择一种而不是另一种。

  • 我在Java web应用程序中有一个分层体系结构。UI层只是Java,服务是Akka类型的actor,外部服务调用(WS、DB等)包装在Hystrix命令中。 问题是,我想释放服务参与者正在使用的线程,而只是绑定Hystrix使用的线程。但是java的未来阻止了这一点,因为我必须阻止它的完成。我能想到的唯一选项(我不确定我喜欢)是不断地轮询Java future(一个或多个),并在Java fut

  • 我最近开始探索Scala,并开始在我的Eclipse(Indigo)副本中安装Scala IDE。我最初为Scala 2.9安装了Scala IDE,但后来注意到有一个更新的版本可用于Scala 2.10。在旧插件上安装新插件似乎已经奏效,但是... Scala 2.10已经弃用了较旧的Scala演员,取而代之的是Akka演员。因此,我试图向我的玩具Scala项目添加一个导入: IDE中会标记此错