Overview
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:
Configure the Asynchronous Runtime muestra cómo configurar su aplicación para usar el entorno de ejecución asíncrono
tokioConfigurar la API sincrónica muestra cómo configurar su aplicación para utilizar los
synctokio-synctiempos de ejecución sincrónicos yUsa tanto las API asíncronas como las síncronas muestra cómo habilitar tanto las API de tiempo de ejecución asíncronas como síncronas en tu aplicación
Información adicional proporciona enlaces a recursos y documentación de la API para los tipos y métodos mencionados en esta guía
Configurar el tiempo de ejecución asincrónico
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.
Ejemplo de Runtime 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 }); }
Configura la API síncrona
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"]
Ejemplo de código síncrono
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); } }
Utiliza tanto APIs asíncronas como síncronas
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"]
Información Adicional
Para obtener más información sobre los conceptos de esta guía, consulta 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, vea la siguiente documentación de la API: