Overview
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
tokiotiempo de ejecución asincrónicoConfigurar la API sincrónica muestra cómo configurar su aplicación para utilizar los
synctokio-synctiempos de ejecución sincrónicos yUsar 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.
Configurar el tiempo de ejecución asincrónico
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.
Ejemplo de tiempo de ejecució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 }); }
Configurar la API sincrónica
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"]
Ejemplo de código sincrónico
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); } }
Utilice API asincrónicas y sincrónicas
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"]
Información Adicional
Para obtener más información sobre los conceptos de esta guía, consulte las siguientes páginas:
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API: