GearmanClient::addServer

(PECL gearman >= 0.5.0)

GearmanClient::addServerAdd a job server to the client

说明

public GearmanClient::addServer ([ string $host = 127.0.0.1 [, int $port = 4730 ]] ) : bool

Adds a job server to a list of servers that can be used to run a task. No socket I/O happens here; the server is simply added to the list.

参数

host

任务服务器主机名。

port

任务服务器端口号。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

范例

Example #1 Adding two job servers

<?php

# Create our client object.
$gmclient= new GearmanClient();

# Add two job servers, the first on the default 4730 port
$gmclient->addServer("10.0.0.1"); 
$gmclient->addServer("10.0.0.2"7003);

?>

参见

User Contributed Notes

michael at butlerpc dot net 21-May-2019 05:23
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

?>
brainreflex at gmail dot com 04-Dec-2015 02:59
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']);
  }
}

?>
kosta250 at gmail dot com 23-Nov-2015 12:14
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.
Peter 02-Mar-2015 11:18
Solution:
https://bugs.launchpad.net/gearmand/+bug/1118751
Amit 29-Oct-2013 06:19
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
info at phpgangsta dot de 08-Apr-2013 11:22
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.