Pull to refresh

Cloudflare добавила поддержку Rust для создания воркеров

Reading time2 min
Views2.1K

В Cloudflare внедрили поддержку создания воркеров на Rust без использования JavaScript. Соответствующий код опубликован на GitHub. 

Cloudflare Workers представили в 2018 году. Этот инструмент позволяет разворачивать JS-скрипты по всей облачной сети компании в пределах 30 секунд. Это позволяет перенаправлять запросы периферии, которая ближе всего к пользователю, что сокращает среднее время отклика и увеличивает производительность веб-приложений. Воркеры основаны на стандартном API от W3C для скриптов, работающих в фоновом режиме в браузере и перехватывающих HTTP-запросы, но код запускается не в браузере, а на серверах компании. Администраторы могут, в частности, перехватывать и модифицировать HTTP-запросы и высылать URL, статус, содержимое контейнеров header и body, отвечать на запросы из воркеров, отправлять HTTP-запросы сторонним серверам, управлять другими функциями CloudFlare, в том числе, кэшированием, создавать бессерверные приложения на веб-API и так далее.

Воркеры уже поддерживают запуск на многих языках с помощью WebAssembly. Однако для взаимодействия Rust с JavaScript API нужно было выполнить несколько шагов. Кроме того, не включалась поддержка API-интерфейсов Cloudflare, таких как KV и Durable Objects. 

Теперь разработчики Rust могут работать с воркерами, выполняя код внутри движка V8 WebAssembly:

use worker::*;

#[event(fetch)]
pub async fn main(req: Request, env: Env) -> Result<Response> {
    console_log!(
        "{} {}, located at: {:?}, within: {}",
        req.method().to_string(),
        req.path(),
        req.cf().coordinates().unwrap_or_default(),
        req.cf().region().unwrap_or("unknown region".into())
    );

    if !matches!(req.method(), Method::Post) {
        return Response::error("Method Not Allowed", 405);
    }

    if let Some(file) = req.form_data().await?.get("file") {
        return match file {
            FormEntry::File(buf) => {
                Response::ok(&format!("size = {}", buf.bytes().await?.len()))
            }
            _ => Response::error("`file` part of POST form must be a file", 400),
        };
    }

    Response::error("Bad Request", 400)
}

Чтобы создать собственный воркер в Rust, требуется одна команда:

# see installation instructions for our `wrangler` CLI at https://github.com/cloudflare/wrangler
# (requires v1.19.2 or higher)
$ wrangler generate --type=rust my-project

Таким образом, разработчики убрали весь связующий код и встроили компоненты, необходимые для создания небольших скриптов или полноценных приложений на Rust: маршрутизатор, функции HTTP, хранилища воркеров KV и переменные среды. 

В Cloudflare отметили, что выбрали Rust как растущий язык с мощной экосистемой. Команда заявила, что ждет отзывы и правки от разработчиков, а также расширяет штат, в том числе, открывает вакансии инженеров Rust.

Tags:
Hubs:
Total votes 14: ↑14 and ↓0+14
Comments0

Other news