Red de conocimiento informático - Conocimiento informático - Cómo establecer tiempos de espera para operaciones de socket

Cómo establecer tiempos de espera para operaciones de socket

Descripción general de la configuración de tiempos de espera predeterminados para operaciones de socket

La clase StreamSocket implementa sockets TCP en aplicaciones Windows Runtime. Los sockets TCP básicos implementados en Windows 8.1, Windows Phone 8.1 y Windows Server 2012 establecen un tiempo de espera predeterminado para todas las operaciones de sockets de conexión TCP. Cuando se utilizan nombres de host o puntos finales, el tiempo de espera predeterminado es de 3 minutos (180 segundos) por par de direcciones de origen y destino. Por lo tanto, si el nombre de host de destino tiene dos direcciones IP, la operación de conexión solo expirará después de aproximadamente 6 minutos. Este tiempo de espera predeterminado puede ser demasiado largo para la experiencia del cliente al utilizar aplicaciones de Windows Runtime. Por lo tanto, es posible que las aplicaciones que utilizan la clase StreamSocket deseen establecer un tiempo de espera personalizado más corto para las operaciones de conexión de sockets de transmisión.

Las clases DatagramSocket y StreamSocket no tienen un tiempo de espera predeterminado al enviar o recibir datos de red. Por lo tanto, cualquier operación de envío o recepción esperará para siempre. Es posible que las aplicaciones Windows Runtime que usan sockets deseen establecer tiempos de espera para estas operaciones para una mejor experiencia del cliente.

La clase StreamSocketListener siempre escuchará y esperará las solicitudes de conexión entrantes.

Cómo establecer tiempos de espera personalizados para operaciones de socket

El lenguaje JavaScript admite eventos cronometrados que ejecutan código específico en intervalos específicos.

Eventos cronometrados de JavaScript

setInterval(): ejecuta repetidamente una función en un intervalo de tiempo específico (milisegundos).

setTimeout() - Ejecuta una función después de esperar el número especificado de milisegundos.

La función de evento Timeout se implementa en el objeto de ventana HTML DOM.

El espacio de nombres WinJS proporciona una biblioteca especial de Windows para funciones JavaScript que contienen objetos WinJS.Promise. El método timeout (timeout, promesa) encapsula la función setTimeout. Las aplicaciones de Windows pueden usar el método de tiempo de espera (tiempo de espera, promesa) para cancelar una promesa si la promesa no se completa dentro del número de milisegundos especificado por el parámetro de tiempo de espera. Si la operación del socket no se completa dentro del intervalo especificado en el parámetro de tiempo de espera, puede agotar el tiempo de espera de la operación llamando al método timeout(timeout, promesa) con la operación del socket como parámetro de promesa. Una operación de socket se puede cancelar mientras la operación aún esté pendiente.

El objeto WinJS.Promise y el método timeout(timeout, promesa) se pueden usar para cualquier operación asincrónica en una aplicación Windows Runtime, incluidas todas las operaciones de socket asincrónicas. Para una finalización normal, puede agregar ".then" después de la llamada al método de tiempo de espera (tiempo de espera, promesa).

El modelo básico para usar tiempos de espera es el mismo para las tres clases. La siguiente discusión tomará como ejemplo las operaciones de conexión en StreamSocket. Se puede usar el mismo modelo para implementar tiempos de espera cuando se usa un objeto DatagramSocket o StreamSocket para enviar o recibir datos de red, o cuando se usa un objeto StreamSocketListener para escuchar conexiones entrantes.

Crea un StreamSocket.

Llame al método timeout(timeout, promesa) y utilice uno de los métodos StreamSocket.connectAsync como parámetro de promesa.

Agregue el método then(successFunction, errorFunction) al final del código fuente para manejar las condiciones de éxito y error.

Cierre el socket en caso de error. Un StreamSocket cancelado no puede seguir utilizándose después de que la operación StreamSocket no se haya confirmado.

El siguiente ejemplo implementa un tiempo de espera personalizado para una operación de conexión StreamSocket.

JavaScript

var clientSocket = null;

var timeout = 10000; // 10 segundos

función openClient() {

p>

var serverHostName = new Windows.Networking.HostName("www.contoso.com");

var serviceName = "pletado.");

// en Realice sus operaciones de socket aquí.

}, función (razón) {

// Hay muchas razones para este error: puede ser un tiempo de espera de promesa, o el host del servidor rechaza la conexión, o hay

// Problema de TCP o alguna otra posibilidad.

// displayStatus("Cliente: conexión fallida."); // displayStatus("Cliente: conexión fallida."); función (motivo) {

// Esto aparece Los fallos pueden ocurrir por muchas razones.

// displayStatus(reason.message);

clientSocket.close();

clientSocket = null;

} p>

));

}