Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

APIs asíncronas y síncronas

En esta guía, puede aprender sobre el controlador Rust asíncronas y síncronas APIs. Esta guía explica cómo habilitar las API disponibles y estructurar tu código para usar cada una de ellas.

El controlador de Rust admite el tokio una caja de tiempo de ejecución asíncrona, que es la caja por defecto.

El controlador también incluye una API síncrona para casos de uso que requieren bloqueo o cuando no se requiere paralelismo. Puede seleccionar la API síncrona añadiendo indicadores de función a la dependencia mongodb en su archivo Cargo.toml.

Esta guía incluye las siguientes secciones:

El controlador utiliza el tokio tiempo de ejecución por defecto, por lo que puedes utilizar este tiempo de ejecución sin especificar ninguna bandera de funcionalidad en el archivo Cargo.toml de tu proyecto. Para obtener más información sobre cómo instalar el driver y configurar el archivo Cargo.toml, consulte la Paso de descargar e instalación de la guía de inicio rápido.

Importante

A partir del driver Rust v3.0, el entorno de ejecución de tokio es la única caja asíncrona que admite el driver. Las versiones anteriores del driver también son compatibles con la caja async-std.

Si tu aplicación utiliza el runtime async-std, puedes iniciar un runtime tokio en la misma aplicación creando una instancia de struct Runtime y envolviendo las operaciones del driver con el método Runtime::spawn(). Asegúrese de usar la misma instancia de Runtime para crear una instancia de Client y llamar los métodos del controlador en esa instancia de Client.

Para un ejemplo que instancia un Runtime y llama al método spawn(), consulta la documentación de tokio.

El siguiente código utiliza el módulo task de la caja tokio para crear tareas independientes y concurrentes para múltiples operaciones de datos:

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
});
}

El controlador también proporciona una API síncrona y bloqueante. Para utilizar la API síncrona de tokio, añade la bandera de funcionalidad "sync" a la dependencia de mongodb, como se muestra en el siguiente ejemplo:

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

Al utilizar la API síncrona, use los tipos del módulo mongodb::sync para ejecutar operaciones. El siguiente código utiliza el módulo sync para insertar datos en una colección mediante la API síncrona. Cuando el método insert_one se ejecuta dentro del bucle for, el controlador espera a que cada solicitud se complete 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);
}
}

Puedes utilizar tanto API asincrónicas como sincrónicas en la misma aplicación. Por ejemplo, para habilitar ambos entornos de ejecución tokio, puedes agregar la dependencia tokio a la lista de dependencias y añadir la bandera "sync" a la dependencia mongodb:

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

Para obtener más información sobre los conceptos de esta guía, consulta las siguientes páginas:

Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API:

Volver

Consideraciones sobre el rendimiento

En esta página