Menu Docs
Página inicial do Docs
/ / /
Driver Rust
/

APIs assíncronas e síncronas

Nesta página

  • Visão geral
  • Configurar o tempo de execução assíncrono
  • Exemplo de tempo de execução do Tokio
  • Configurar a API síncrona
  • Exemplo de código síncrono
  • Usar APIs assíncronas e síncronas
  • Informações adicionais
  • Documentação da API

Neste guia, você aprenderá sobre as APIsassíncronas e síncronas do driver Rust. Este guia explica como habilitar as APIs disponíveis e estruturar seu código para usar cada uma.

O driver Rust oferece suporte à crate de tempo de execução assíncrona tokio , que é o tempo de execução padrão.

O driver também inclui uma API síncrona para casos de uso que exigem bloqueio ou quando o paralelismo não é necessário. Você pode selecionar a API síncrona adicionando sinalizadores de feição à dependência do mongodb no seu arquivo Cargo.toml .

Este guia inclui as seguintes seções:

O driver utiliza o tempo de execução tokio por padrão, então você pode utilizar este tempo de execução sem especificar nenhum sinalizador de feição no arquivo Cargo.toml do seu projeto. Para obter mais informações sobre como instalar o driver e configurar seu arquivo Cargo.toml , consulte a etapa Download e instalação do Início Rápido.

Importante

A partir do driver Rust v3.0, o tempo de execução tokio é a única crate de tempo de execução assíncrona que o driver suporta. Versões anteriores do driver também suportam a crate de tempo de execução do async-std .

Se seu aplicação usar o tempo de execução async-std , você poderá iniciar um tempo de execução tokio no mesmo aplicação criando uma instância de estrutura Runtime e encapsulando operações de driver com o método Runtime::spawn() . Certifique-se de usar a mesma instância Runtime para instanciar um Client e chamar os métodos de driver nessa instância Client .

Para ver um exemplo que instancia um Runtime e chama o spawn() método ,consulte a documentação do tokio.

O código a seguir usa o módulo task da caixa tokio para criar tarefas simultâneas separadas para várias operações de dados:

let client = Client::with_uri_str("<connection string>").await?;
let some_data = doc! { "title": "1984", "author": "George Orwell" };
for i in 0..5 {
let client_ref = client.clone();
let somedata_ref = some_data.clone();
task::spawn(async move {
let collection = client_ref
.database("items")
.collection::<Document>(&format!("coll{}", i));
collection.insert_one(somedata_ref).await
});
}

O driver também fornece uma API síncrona de bloqueio. Para usar a tokio API síncrona , adicione o "sync" sinalizador de recurso mongodb , conforme mostrado no exemplo a seguir:

[dependencies.mongodb]
version = "3.1.0"
features = ["sync"]

Ao usar a API síncrona, use tipos do módulo mongodb::sync para executar operações. O código abaixo usa o módulo sync para inserir dados em uma collection usando a API síncrona. Quando o método insert_one é executado dentro do loop for , o driver aguarda que cada solicitação seja concluída antes de continuar.

use mongodb::sync::Client;
fn main() {
let client = Client::with_uri_str("<connection string>")?;
let some_data = doc! { "title": "1984", "author": "George Orwell" };
for i in 0..5 {
let client_ref = client.clone();
let somedata_ref = some_data.clone();
let collection = client_ref
.database("items")
.collection::<Document>(&format!("coll{}", i));
collection.insert_one(somedata_ref);
}
}

Você pode usar APIs assíncronas e síncronas no mesmo aplicação. Por exemplo, para habilitar ambos os tempos de execução do tokio , você pode adicionar a dependência do tokio à sua lista de dependências e adicionar o sinalizador do mongodb "sync" dependência do :

[dependencies]
futures = "0.3.28"
tokio = {version = "1.32.0", features = ["full"]}
[dependencies.mongodb]
version = "3.1.0"
features = ["sync"]

Para obter mais informações sobre os conceitos deste guia, consulte as seguintes páginas:

Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo:

Voltar

Considerações de desempenho