Señalización — Web

Utiliza la API de señalización de OpenTok para enviar texto y datos entre los clientes conectados a una sesión de OpenTok.

Para obtener información conceptual sobre la API de señalización de OpenTok, consulta el Resumen sobre la señalización guía del desarrollador.

Este tema incluye las siguientes secciones:

Enviar una señal a un cliente concreto en una sesión

Para enviar una señal a un cliente concreto en una sesión, llama a la función signal() método del objeto Session y establecer el to propiedad del signal parámetro:

session.signal(
  {
    to: connection1,
    data:"hello"
  },
  function(error) {
    if (error) {
      console.log("signal error ("
                   + error.name
                   + "): " + error.message);
    } else {
      console.log("signal sent.");
    }
  }
);

El to La propiedad es una Conexión objeto correspondiente a los clientes conectados a la sesión a la que deseas enviar la señal. Las referencias a los objetos Connection se obtienen cuando el objeto Session envía sessionConnected y connectionCreated eventos. También puedes obtener el objeto Connection correspondiente a un flujo recuperando el connection propiedad del objeto Stream.

El data propiedad del signal El parámetro es la cadena de datos que se envía junto con el mensaje. Esta propiedad es opcional. Si se omite, el mensaje se enviará sin carga útil de datos. El límite de tamaño de los datos es de 8 KB.

El completerHandler del signal() El método se invoca cuando la llamada al método se realiza con éxito o falla. El error El parámetro que se pasa al controlador de finalización se establece en null si la llamada se realiza correctamente. Cuando la llamada al método falla, el objeto de error tiene las siguientes propiedades: code (un código de error numérico), message (una cadena que describe el error), y signal (un objeto correspondiente al signal pasado al parámetro signal() método).

Además, puedes pasar un type propiedad del signal parámetro. Se trata de un valor de cadena que los clientes pueden utilizar para filtrar cuando estar atento a las señales:

session.signal(
  {
    data:"hello",
    type:"textMessage"
  },
  function(error) {
    if (error) {
      console.log("signal error ("
                   + error.name
                   + "): " + error.message);
    } else {
      console.log("signal sent.");
    }
  }
);

La longitud máxima del type La cadena tiene 128 bytes y solo debe contener letras (A-Z y a-z), Numbers (0-9), «-», «_» y «~».

Para obtener más información, consulta la documentación sobre el Session.signal() método.

Envío de una señal a todos los clientes de una sesión

Para enviar una señal a todos los clientes de una sesión, llama a la función signal() método del objeto Session, pero no establecer un to para la propiedad signal parámetro:

session.signal(
  {
    data:"hello"
  },
  function(error) {
    if (error) {
      console.log("signal error ("
                   + error.name
                   + "): " + error.message);
    } else {
      console.log("signal sent.");
    }
  }
);

Para obtener más información sobre las demás opciones que se pasan a la función signal() método, véase la sección anterior.

Si se llama a este método sin limitar el conjunto de clientes destinatarios, se enviarán varias señales (una a cada cliente de la sesión).

Recepción de señales en una sesión

Para empezar a recibir todas las señales enviadas en una sesión, añade un detector de eventos para el signal evento, enviado por el objeto Session:

    session.on("signal", function(event) {
      console.log("Signal sent from connection " + event.from.id);
      // Process the event.data property, if there is any data.
    });

También puedes escuchar únicamente las señales configuradas con un tipo específico. (Puedes configurar el tipo de una señal, si lo deseas, cuando enviar una señal.) Registrar un detector de eventos para el signal:type evento, sustituyendo «type» por la cadena que indica el tipo. Por ejemplo, el siguiente código escucha señales del tipo «foo»:

session.on("signal:foo", function(event) {
 console.log("Signal sent from connection " + event.from.id);
 // Process the event.data property, if there is any data.
});

Puedes comparar el from propiedad del objeto de evento con el connection propiedad del objeto Session para comprobar si la señal la envió tu cliente u otro:

session.on("signal:foo", function(event) {
  if (connection && event.from.connectionId != session.connection.id) {
    // Signal received from another client
  }
}

Ten en cuenta que puedes utilizar un Llamada a la API REST para enviar una señal desde tu servidor, en lugar de desde un cliente conectado a la sesión. En este caso, el from La propiedad del objeto de evento se establece en null.

Evitar que se envíen señales durante la reconexión automática

Los clientes intentarán volver a conectarse automáticamente a una sesión de la que se hayan desconectado de forma inesperada (por ejemplo, debido a una interrupción de la conexión de red). De forma predeterminada, cualquier señal que envíes mientras el cliente esté temporalmente desconectado de una sesión se pone en cola y se envía cuando (y si) se vuelve a conectar con éxito. Puedes configurar el retryAfterReconnect propiedad a false en las opciones que introduzca en el campo Session.signal() Método para evitar que las señales se acumulen en la cola mientras el cliente está desconectado. Para obtener más información, consulta Reconexión automática.