Docs Menu
Docs Home
/ /

APIs asíncronas y síncronas

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

El controlador Rust admite el tokio caja de tiempo de ejecución asincrónico, que es el tiempo de ejecución predeterminado.

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:

  • Configurar el tiempo de ejecución asincrónico muestra cómo configurar su aplicación para utilizar el tokio tiempo de ejecución asincrónico

  • Configurar la API sincrónica muestra cómo configurar su aplicación para utilizar los sync tokio-sync tiempos de ejecución sincrónicos y

  • Usar API asincrónicas y sincrónicas muestra cómo habilitar las API de tiempos de ejecución asincrónicos y sincrónicos en su aplicación

  • Información adicional proporciona enlaces a recursos y documentación de API para los tipos y métodos mencionados en esta guía.

El controlador usa el entorno de ejecución tokio de forma predeterminada, por lo que puede usarlo sin especificar ninguna característica en el archivo Cargo.toml de su proyecto. Para obtener más información sobre la instalación del controlador y la configuración de su archivo Cargo.toml, consulte Paso de descarga e instalación del inicio rápido.

Importante

A partir del controlador Rust v3.0, el entorno de ejecución tokio es el único entorno de ejecución asíncrono compatible con el controlador. Las versiones anteriores del controlador también admiten el entorno de ejecución async-std.

Si su aplicación usa el entorno de ejecución async-std, puede iniciar un entorno de ejecución tokio en la misma aplicación creando una instancia de estructura Runtime y encapsulando las operaciones del controlador con el método Runtime::spawn(). Asegúrese de usar la misma instancia Runtime para instanciar un Client y llamar a los métodos del controlador en esa instancia Client.

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

El siguiente código utiliza el módulo task del paquete tokio para crear tareas simultáneas e independientes 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 de bloqueo. Para usar la API síncrona tokio, agregue el indicador de función "sync" a la dependencia mongodb, como se muestra en el siguiente ejemplo:

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

Al usar la API síncrona, utilice los tipos del módulo mongodb::sync para realizar operaciones. El siguiente código usa 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 se complete cada solicitud 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.1"
features = ["sync"]

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

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

Volver

Consideraciones sobre el rendimiento

En esta página