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.

¿Por qué la conexión de Websocket se desconecta después de enviar un mensaje en dispositivos iOS 15?

Estoy construyendo un sitio web basado en la comunicación de WebSockets. Funcionaba bien hasta iOS 14 pero comenzó a fallar a partir de iOS 15. El cliente de JavaScript de WebSocket puede abrir una conexión con el servidor, pero al intentar enviar un mensaje, la conexión se cierra. A continuación se muestra mi código HTML y JS.

function start_websocket() {
  connection = new WebSocket("wss://localhost/wss/");
  connection.onopen = function() {
    console.log('Conexión abierta');
  };
  connection.onerror = function(error) {
    console.log('Error de WebSocket ' + error);
  };
  connection.onclose = function() {
    console.log("Cerrada");
  };
  connection.onmessage = function(e) {
    console.log("Mensaje recibido: " + e.data);
  };
}

function myFunction() {
  var testText = document.getElementById("testText");
  if (testText.value != "" && connection.readyState === connection.OPEN) {
    connection.send("Test");
  }
}

start_websocket();

myFunction() es un evento onclick de un botón.

Se utiliza un servidor Java de WebSockets, que decodificará y enviará los mensajes basados ​​en el formato de datos descrito en https://datatracker.ietf.org/doc/html/rfc6455#section-5.

He visto diferentes artículos en la web, pero no encontré una solución a este problema. Se agradecen cualquier sugerencia. Espero sus respuestas.

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con los cambios en el comportamiento de WebSocket en iOS 15. Una solución posible podría ser agregar la extensión “permessage-deflate” como una opción en el constructor de WebSocket, ya que algunas fuentes sugieren que esto podría ayudar a resolver problemas de compatibilidad en las versiones más nuevas de iOS.

    Puedes probar el siguiente código:

    function start_websocket() {
      connection  = new WebSocket("wss://localhost/wss/", ["permessage-deflate"]);
      connection.onopen = function () {
        console.log('Conexión abierta');        
      };
      connection.onerror = function (error) {
        console.log('Error de WebSocket ' + error);
      };
      connection.onclose = function(){
        console.log("Cerrado");
      };
      connection.onmessage = function (e) {
        console.log("Mensaje recibido: " + e.data);
      };
    }
    
    function myFunction() {
       var testText = document.getElementById("testText");
       if (testText.value != "" && connection.readyState === connection.OPEN) {
          connection.send("Prueba");
       }
    }
    
    start_websocket();
    

    Si esto no resuelve el problema, podría valer la pena verificar si la implementación de WebSocket en el lado del servidor necesita actualizarse para admitir los cambios en el comportamiento de WebSocket en iOS 15.

    ¡Espero que esto ayude!

Comments are closed.