Start · Sprachen · PHP · Referenz · MongoDB\Driver\ServerDescription

MongoDB\Driver\ServerDescription

Klasse

Beschreibt den Zustand und die Eigenschaften eines einzelnen MongoDB-Servers, wie Typ, Latenz und Topology-Version.

seit PHP 1.8.0 Kategorie: db

Signatur

class MongoDB\Driver\ServerDescription

Beschreibung

MongoDB\Driver\ServerDescription ist eine schreibgeschützte Klasse des offiziellen MongoDB-PHP-Treibers, die einen Schnappschuss der vom SDAM (Server Discovery and Monitoring) ermittelten Eigenschaften eines bestimmten Servers repräsentiert. Sie enthält Informationen wie den Servertyp (Primary, Secondary, Standalone usw.), die gemessene Round-Trip-Latenz sowie das Ergebnis des zuletzt ausgeführten hello-Befehls.

Objekte dieser Klasse werden nicht direkt instanziiert, sondern über Methoden wie MongoDB\Driver\Server::getServerDescription() oder über MongoDB\Driver\Monitoring\ServerChangedEvent::getNewDescription() bzw. getOldDescription() bezogen. Sie sind daher typischerweise im Kontext von SDAM-Monitoring-Events relevant.

Mit ServerDescription lassen sich Topologie-Wechsel beobachten, eigene Monitoring-Logik implementieren oder Servertyp-basierte Routing-Entscheidungen treffen. Die Klasse ist besonders nützlich, wenn benutzerdefinierte MongoDB\Driver\Monitoring\SDAMSubscriber-Implementierungen eingesetzt werden.

Da die Klasse den Zustand eines Servers zu einem bestimmten Zeitpunkt widerspiegelt, sind ihre Rückgabewerte unveränderlich (immutable). Jede Änderung am Server erzeugt ein neues ServerDescription-Objekt.

Beispiele

Servertyp und Latenz eines verbundenen Servers ausgeben

<?php

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

// Alle bekannten Server abfragen
$servers = $manager->getServers();

foreach ($servers as $server) {
    $desc = $server->getServerDescription();

    echo 'Host:    ' . $desc->getHost() . PHP_EOL;
    echo 'Port:    ' . $desc->getPort() . PHP_EOL;
    echo 'Typ:     ' . $desc->getType() . PHP_EOL;
    echo 'Latenz:  ' . $desc->getRoundTripTime() . ' ms' . PHP_EOL;
    echo '---' . PHP_EOL;
}
Host: localhost Port: 27017 Typ: Standalone Latenz: 1.234 ms ---

SDAM-Monitoring: Serveränderungen beobachten

<?php

use MongoDB\Driver\Monitoring\SDAMSubscriber;
use MongoDB\Driver\Monitoring\ServerChangedEvent;
use MongoDB\Driver\Monitoring\ServerClosedEvent;
use MongoDB\Driver\Monitoring\ServerOpeningEvent;
use MongoDB\Driver\Monitoring\TopologyChangedEvent;
use MongoDB\Driver\Monitoring\TopologyClosedEvent;
use MongoDB\Driver\Monitoring\TopologyOpeningEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent;

class MyServerMonitor implements SDAMSubscriber
{
    public function serverChanged(ServerChangedEvent $event): void
    {
        $old = $event->getOldDescription();
        $new = $event->getNewDescription();

        printf(
            'Server %s:%d geändert: %s -> %s' . PHP_EOL,
            $new->getHost(),
            $new->getPort(),
            $old->getType(),
            $new->getType()
        );
    }

    public function serverClosed(ServerClosedEvent $event): void {}
    public function serverOpening(ServerOpeningEvent $event): void {}
    public function topologyChanged(TopologyChangedEvent $event): void {}
    public function topologyClosed(TopologyClosedEvent $event): void {}
    public function topologyOpening(TopologyOpeningEvent $event): void {}
    public function serverHeartbeatFailed(ServerHeartbeatFailedEvent $event): void {}
    public function serverHeartbeatStarted(ServerHeartbeatStartedEvent $event): void {}
    public function serverHeartbeatSucceeded(ServerHeartbeatSucceededEvent $event): void {}
}

MongoDB\Driver\Monitoring\addSubscriber(new MyServerMonitor());

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
// Beliebige Operation auslösen, damit der Treiber den Server erkennt
$manager->executeCommand('admin', new MongoDB\Driver\Command(['ping' => 1]));
Server localhost:27017 geändert: Unknown -> Standalone

// Wichtig · Fallstricke

Schreibschutz: ServerDescription-Objekte sind vollständig immutable und können nicht manuell instanziiert werden. Sie repräsentieren immer einen einmaligen Snapshot.

Servertypen: Der von getType() zurückgegebene String ist einer der Werte aus MongoDB\Driver\ServerDescription::TYPE_*-Konstanten, z. B. TYPE_RS_PRIMARY, TYPE_STANDALONE, TYPE_MONGOS oder TYPE_UNKNOWN.

Latenzangabe: Die von getRoundTripTime() gelieferte Latenz kann null sein, wenn der Server noch nicht erfolgreich kontaktiert wurde (Typ TYPE_UNKNOWN).

Extension-Version: Die Klasse ist ab mongodb-Extension Version 1.8.0 verfügbar. Einige Methoden wie getTopologyVersion() erfordern MongoDB-Server 4.4 oder neuer.