es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En Tokio-Tungstenite, la siguiente causa es la salida.

Estoy utilizando tokio-tungstenite para acceder a un servidor. Desafortunadamente, la operación de lectura no funciona y el programa finaliza con el código de error 0, por lo que, a priori, no hay errores. Un código simplificado (los “”” no son los que usé) sería:

use tokio_tungstenite::connect_async;
use futures_util::StreamExt;
use futures_util::SinkExt;

#[tokio::main]
async fn main() {
  let url_name = "wss://...";
  let (ws_stream, _) = connect_async(url_name).await.unwrap();
  let (mut write, mut read) = ws_stream.split();
  tokio::spawn(async move {
    let ent = read.next().await;
    println!("We have ent");
  });
  write.send(tokio_tungstenite::tungstenite::Message::Text("...".to_string())).await;
}

El comportamiento del programa con errores que esperaría es que la lectura quede colgada o que “ent” sea “None” o que contenga el error adentro de él que pueda interpretar. Pero no, el programa se cierra sin mensajes de error.

Además del problema inmediato de qué está mal, ¿qué podría ser un enfoque de depuración para entender qué está sucediendo en tokio?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el código proporcionado, parece que el problema podría deberse al hecho de que el programa no espera a que se envíe el mensaje antes de intentar leer desde el flujo. Para depurarlo, un enfoque posible podría ser agregar algunas declaraciones de impresión para verificar el flujo del programa.

    Por ejemplo, podríamos agregar una declaración de impresión antes y después de la llamada write.send() para ver si el programa alcanza ese punto y si el mensaje se envía correctamente. También podríamos agregar una declaración de impresión después de la línea let ent = read.next().await; para ver si el programa es capaz de recibir un mensaje.

    Además de las declaraciones de impresión, podríamos usar la función de trazado de Tokio para registrar eventos y ver una vista más detallada de lo que está sucediendo dentro del programa. Esto podría ayudarnos a identificar cualquier error o comportamiento inesperado que no sea visible de inmediato a través de las declaraciones de impresión por sí solas.

    En general, un buen enfoque para depurar sería examinar cuidadosamente el código e intentar identificar cualquier problema potencial o áreas en las que el programa podría no estar comportándose como se esperaba. Al agregar declaraciones de impresión y utilizar herramientas como el trazado, podemos obtener una mejor vista de lo que está sucediendo dentro del programa y, con suerte, identificar la fuente del problema.

Comments are closed.