An einer Sitzung teilnehmen — Web

Mithilfe einer Sitzungs-ID und eines Tokens können Sie über die OpenTok.js-Bibliothek eine Verbindung zur OpenTok-Sitzung herstellen.

Dieses Thema umfasst die folgenden Abschnitte:

Informationen zum Erstellen einer Sitzungs-ID und eines Authentifizierungstokens finden Sie unter Erstellung von Sitzungen und Token-Erstellung.

Initialisierung eines Session-Objekts

Bevor Sie eine Verbindung zu einer Sitzung herstellen können, müssen Sie ein Session-Objekt instanziieren, indem Sie die Methode OT.initSession() Methode mit Ihrer OpenTok-API-Schlüssel und die entsprechende Sitzungs-ID:

// Replace with your OpenTok API key and session ID:
var session = OT.initSession(apiKey, sessionID);

Die OT.initSession() Methode gibt ein Session-Objekt zurück, über das die nachfolgenden API-Aufrufe erfolgen.

Beachten Sie, dass der Aufruf der OT.initSession() Methode nicht erstellen. eine OpenTok-Sitzung; dabei wird ein JavaScript-Session-Objekt erstellt, das eine bestehende OpenTok-Sitzung repräsentiert. Sie erstellen eine OpenTok-Sitzung mithilfe der serverseitigen OpenTok-Bibliotheken. Siehe Eine OpenTok-Sitzung erstellen.

Wenn der Browser des Benutzers WebRTC nicht unterstützt, wird der Aufruf von OT.initSession() führt dazu, dass auf der Seite eine Meldung für den Benutzer angezeigt wird. Um die WebRTC-Unterstützung zu prüfen und zu verhindern, dass diese Meldung angezeigt wird, können Sie die Funktion OT.checkSystemRequirements() Methode vor dem Aufruf OT.initSession():

if (OT.checkSystemRequirements() == 1) {
  var session = OT.initSession(apiKey, sessionId);
} else {
  // The client does not support WebRTC.
  // You can display your own message.
}

Verbinden mit einer Sitzung

Sobald Sie ein Session-Objekt initialisiert, nennen Sie es connect() Methode, wobei ein Token und eine Abschluss-Handler-Funktion:

var session = OT.initSession(apiKey, sessionId);
session.connect(token, function(error) {
  if (error) {
    console.log("Error connecting: ", error.name, error.message);
  } else {
    console.log("Connected to the session.");
  }
});

Ein Fehlerobjekt wird an den Completion-Handler der connect Ereignis, wenn der Client keine Verbindung zur OpenTok-Sitzung herstellen kann. Andernfalls wird kein Fehlerobjekt übergeben, was darauf hinweist, dass der Client erfolgreich eine Verbindung zur Sitzung hergestellt hat.

Das Session-Objekt sendet auch eine sessionConnected Ereignis, wenn der Client eine Verbindung zur OpenTok-Sitzung herstellt. Und das OT-Objekt löst ein exception Ereignis, wenn ein Fehler bei der Verbindung auftritt. Es ist jedoch einfacher, den Erfolg der Verbindung zu überprüfen, indem man einen Completion-Handler an die connect() Methode als letzten Parameter.

Trennen der Verbindung zu einer Sitzung

Um eine Sitzung zu beenden, rufen Sie die Funktion disconnect() Methode des Session-Objekts:

session.disconnect();

Erkennen, wenn Sie die Verbindung unterbrochen haben

Wenn Ihr Client die Verbindung zu einer Sitzung trennt, sendet das Sitzungsobjekt eine sessionDisconnected Veranstaltung:

session.on("sessionDisconnected", function (event) {
  // The event is defined by the SessionDisconnectEvent class
  if (event.reason == "networkDisconnected") {
    alert("Your network connection terminated.")
  }
});
session.connect(token);

Die reason Die Eigenschaft des Ereignisses ist eine Zeichenfolge, die angibt, warum die Sitzung getrennt wurde. Im vorigen Beispiel wird der Benutzer beispielsweise darüber informiert, dass die Verbindung aufgrund einer unterbrochenen Netzwerkverbindung getrennt wurde. Weitere Informationen finden Sie unter SessionDisconnectEvent.

Automatische Wiedereinschaltung

Clients versuchen, automatisch wieder eine Verbindung zu einer Sitzung herzustellen, von der sie unerwartet getrennt wurden (beispielsweise aufgrund einer Unterbrechung der Netzwerkverbindung). Sie müssen keinen zusätzlichen Code hinzufügen, damit die Clients automatisch wieder eine Verbindung herstellen, es sei denn, Sie möchten auf Ereignisse reagieren, die ausgelöst werden, wenn Ihr Client die Verbindung verliert und wieder herstellt. Beispielcode zur Veranschaulichung der Verwendung dieser Ereignisse finden Sie unter openok-reconnection Repo auf GitHub.

Wenn die Verbindung unterbrochen wird und der Client versucht, die Verbindung wieder herzustellen, sendet das Session-Objekt eine reconnecting Ereignis. Wenn die Verbindung wiederhergestellt ist, sendet das Session-Objekt ein reconnected Ereignis. Kann der Client die Verbindung nicht wiederherstellen, trennt er die Verbindung zur OpenTok-Sitzung, und das Session-Objekt löst das sessionDisconnected Veranstaltung.

Als Reaktion auf diese Ereignisse kann Ihre Anwendung (optional) Benachrichtigungen auf der Benutzeroberfläche anzeigen, die den Zustand der vorübergehenden Unterbrechung, der Wiederverbindung und der Trennung der Verbindung angeben:

session.on(
  sessionReconnecting: function() {
    // Display a user interface notification.
  },
  sessionReconnected: function() {
    // Adjust user interface.
  },
  sessionDisconnected: function() {
    // Adjust user interface.
  }
);

Wenn Ihr Client die Verbindung zu einer Sitzung vorübergehend unterbricht, senden die Subscriber-Objekte in Clients, die einen von Ihnen veröffentlichten Stream abonnieren, Ereignisse, wenn Ihr veröffentlichter Stream unterbrochen wird und wenn (und falls) er automatisch wieder aufgenommen wird. Für weitere Informationen siehe Automatische Wiedereinschaltung in der Entwickleranleitung "Streams abonnieren".

Standardmäßig werden alle Signale, die Sie senden, während Ihr Client vorübergehend von einer Sitzung getrennt ist, in eine Warteschlange gestellt und gesendet, sobald (und falls) Sie die Verbindung erfolgreich wiederherstellen. Sie können die retryAfterReconnect Eigenschaft zu false in den Optionen, die Sie in der Session.signal() Methode, um zu verhindern, dass Signale in die Warteschlange gestellt werden, während Sie nicht verbunden sind. Für weitere Informationen siehe Verhindern des Sendens von Signalen während der automatischen Wiederherstellung der Verbindung.

Erkennen, wenn Clients eine Verbindung hergestellt und getrennt haben

Das Session-Objekt sendet eine connectionCreated Ereignis, wenn sich ein neuer Client (einschließlich Ihres eigenen) mit der Sitzung verbindet. Das Session-Objekt sendet ein connectionDestroyed Ereignis, wenn andere Clients die Sitzung verlassen. Diese Ereignisse werden durch die Klasse ConnectionEvent definiert, die über eine connection Objekt, bei dem es sich um ein Connection-Objekt für die mit dem Ereignis verbundene (erstellte oder zerstörte) Verbindung handelt:

var connectionCount;
session.on({
  connectionCreated: function (event) {
    connectionCount++;
    if (event.connection.connectionId != session.connection.connectionId) {
      console.log('Another client connected. ' + connectionCount + ' total.');
    }
  },
  connectionDestroyed: function connectionDestroyedHandler(event) {
    connectionCount--;
    console.log('A client disconnected. ' + connectionCount + ' total.');
  }
});
session.connect(token, function (error) {
  if (error) {
    console.log("Failed to connect.");
  } else {
    console.log('You have connected to the session.');
  }
});

Fehlerbehebung bei Sitzungsverbindungsproblemen

Die Session.connect() Methode hat eine Callback-Funktion, der eine optionale error Parameter. Wenn dieser Parameter vorhanden und definiert ist (nicht null oder undefiniert), dann gab es einen Fehler beim Verbindungsaufbau. Wenn Sie in Ihrem Code nach diesem Fehler suchen, können Sie herausfinden, warum der Endbenutzer keine Verbindung herstellen konnte:

session.connect(token, function(err) {
  if (err) {
    // handle error
  } else {
    // connection succeeded
  }
});

Viele Fehler, die bei Verbindungsversuchen auftreten, sind auf ungültige oder abgelaufene Token zurückzuführen. Stellen Sie sicher, dass Sie die bewährten Praktiken für Token befolgen, die wie folgt beschrieben sind hier.

Ein weiterer häufiger Grund für das Scheitern der Verbindung zu einer Sitzung ist die Internetverbindung des Endbenutzers. Beispiele hierfür sind:

  • Der Endnutzer hat seine Internetverbindung verloren
  • Der Endbenutzer hat gemeinsame Ports blockiert, weil er sich in einem restriktiven Netzwerk befindet.

Dies führt zu einem Fehler mit dem Code 1006. Wir empfehlen Ihnen, dies mithilfe des folgenden Codes zu beheben. Weitere Gründe für das Scheitern der Verbindung zu einer Sitzung sind beispielsweise, dass die OpenTok-Server ausgefallen sind oder dass ein unerwarteter Fehler aufgetreten ist (z. B. ein Fehler der Stufe 500 auf dem Server). Auch wenn dies nicht oft vorkommt, ist es empfehlenswert, diese Fehler zu behandeln.

Wenn Sie diese Anweisungen befolgen, sollte Ihr Fehlerbehandlungscode etwa so aussehen:

session.connect(token, function(err) {
  if (err) {
    if (err.name === "OT_NOT_CONNECTED") {
      showMessage('Failed to connect. Please check your connection and try connecting again.');
    } else {
      showMessage('An unknown error occurred connecting. Please try again later.');
    }
  }
});

Sie können die Verbindung verlieren, nachdem Sie bereits erfolgreich mit einer Sitzung verbunden waren. Sie können diesen Fall behandeln, indem Sie auf die sessionDisconnected Ereignis mit dem Grund "networkDisconnected":

session.on({
  sessionDisconnected: function(event) {
    if (event.reason === 'networkDisconnected') {
      showMessage('You lost your internet connection.'
        + 'Please check your connection and try connecting again.');
    }
  }
});

Alles zusammenfügen

Der folgende Code enthält einen connect() Methode, die eine Verbindung zu einer Sitzung herstellt. Sobald die Verbindung besteht, verfolgt der Code, wann Clients der Sitzung beitreten und sie verlassen. Außerdem verfügt er über eine Methode zum Trennen der Verbindung zur Sitzung:

var session;
var connectionCount = 0;

function connect() {
  // Replace apiKey and sessionId with your own values:
  session = OT.initSession(apiKey, sessionId);
  session.on({
    connectionCreated: function (event) {
      connectionCount++;
      console.log(connectionCount + ' connections.');
    },
    connectionDestroyed: function (event) {
      connectionCount--;
      console.log(connectionCount + ' connections.');
    },
    sessionDisconnected: function sessionDisconnectHandler(event) {
      // The event is defined by the SessionDisconnectEvent class
      console.log('Disconnected from the session.');
      document.getElementById('disconnectBtn').style.display = 'none';
      if (event.reason == 'networkDisconnected') {
        alert('Your network connection terminated.')
      }
    }
  });
  // Replace token with your own value:
  session.connect(token, function(error) {
    if (error) {
      console.log('Unable to connect: ', error.message);
    } else {
      document.getElementById('disconnectBtn').style.display = 'block';
      console.log('Connected to the session.');
      connectionCount = 1;
    }
  });
}

function disconnect() {
  session.disconnect();
}

connect();