GearmanClient::addServer

(PECL gearman >= 0.5.0)

GearmanClient::addServerAjoute un serveur de tâches au client

Description

public GearmanClient::addServer(string $host = null, int $port = 0, bool $setupExceptionHandler = true): bool

Ajoute un serveur de tâches à une liste de serveurs qui peuvent être utilisés pour accomplir une tâche. Aucune entrée/sortie sur un socket n'est faite ici; le serveur est juste ajouté à la liste.

Liste de paramètres

host

Le nom d'hôte du serveur de travaux.

port

Le port du serveur de travaux.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Ajout de deux serveurs

<?php

# Crée notre objet client.
$gmclient= new GearmanClient();

# Ajoute deux serveurs de tâches, le premier écoutant sur le port par défaut, 4730
$gmclient->addServer("10.0.0.1");
$gmclient->addServer("10.0.0.2", 7003);

?>

Voir aussi

add a note add a note

User Contributed Notes 6 notes

up
2
info at phpgangsta dot de
10 years ago
Since a few versions the port parameter is not optional anymore. I have version 1.1.1 of pecl/gearman compiled with libgearman 1.1.5, and I'm getting the following error:

send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430

This happens if you don't provide a port.

Just set the second parameter to 4730 and it is working again.
up
2
brainreflex at gmail dot com
8 years ago
Amit, kosta250

I found a workaround to avoid the dead servers and continue with rest alive.

<?php

$servers
= array(
  array(
'host' => '127.0.0.1', 'port' => '4730'),
  array(
'host' => '127.0.0.1', 'port' => '4731'),
  array(
'host' => '127.0.0.1', 'port' => '4732'),
  array(
'host' => '127.0.0.2', 'port' => '4730')
);

$client= new \GearmanClient();

foreach(
$servers as $server) {
 
$c = new \GearmanClient();
 
$c->addServer($server['host'], $server['port']);

  if (@
$c->ping('ping')) {
   
$client->addServer($server['host'], $server['port']);
  }
}

?>
up
0
kosta250 at gmail dot com
8 years ago
Adding to Amit's comments,  I found that if the first server in the list of servers is down, then there seems to be no way to handle such a condition.
up
-1
michael at butlerpc dot net
4 years ago
Prior to version 2.0.5, addServer DOES perform socket I/O indirectly because it calls set_server_option internally for an exception handler. This means if the server is unreachable you will get a GearmanException thrown at this point, and you may want to catch and handle it in your application.

<?php

$client
->addServer('127.0.0.1', 4321); // does attempt a socket connection!

?>

Starting with version 2.0.5 of the extension, a third boolean argument (after $port) may be passed false in order to prevent this from happening.

<?php

$client
->addServer('127.0.0.1', 4321, false); // no socket i/o happens here

?>
up
-1
Amit
10 years ago
The addServer and addServers are unforgiving when any of the addresses are down. I tried using exceptions, but it does not quite work. Can you provide a working example to handle a list of servers where one or more is not running.

Thanks
To Top