note 126999 added to gearmanclient.addserver
| From: | jqv8gg681 at relay dot firefox dot com | Date: | Thu, 21 Apr 2022 03:54:59 +0000 |
| Subject: | note 126999 added to gearmanclient.addserver | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-218300@lists.php.net to get a copy of this message | ||
Combining recommendations from brainreflex and iloveapplepie, as well as hours of testing. This
avoids some bugs in cross versions of gearman across platforms.
It steps though the server list and fails if all are inaccessible.
I also use the same override as "class SmartGearmanClient extends GearmanClient" for the
clients.
<?php // WORKER
class SmartGearmanWorker extends GearmanWorker
{
public $server = false;
public function connect($servers = array( array('host' => '127.0.0.1',
'port' => '4730') ))
{
$connected = false;
foreach ($servers as $server) {
$c = new GearmanClient();
$c->addServer($server['host'], $server['port'], false);
if (@$c->ping('ping')) {
$this->addServer($server['host'], $server['port']);
$connected=true;
$this->server = array(
'host'=>$server['host'],
'port'=>$server['port']
);
break; // Remove this to use last working server in list
}
}
return $connected;
}
}
echo "Starting\n";
# Add some servers
$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'),
array('host' => '192.168.204.10', 'port' =>
'4730')
);
# Create our worker object.
$gmw= new SmartGearmanWorker();
if ($gmw->connect($servers)) {
# Register function "reverseString" with the server.
$gmw->addFunction("reverseString", "reverseString_fn");
print "Connected to
{$gmw->server['host']}:{$gmw->server['port']}...\n";
print "Waiting for jobs...\n";
while ($gmw->work()) {
if ($gmw->returnCode() != GEARMAN_SUCCESS) {
echo "return_code: " . $gmw->returnCode() . "\n";
break;
}
}
echo "DONE\n";
} else {
echo "Unable to connect to any gearman-job-servers.".PHP_EOL;
};
function reverseString_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# Lets send some progress information
for ($x= 0; $x < $workload_size; $x++) {
echo "Sending status: " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# Return what we want to send back to the client.
return $result;
}
----
Server IP: 45.112.84.4
Probable Submitter: 80.90.5.135 (proxied: 121.99.228.14)
----
Manual Page -- https://php.net/manual/en/gearmanclient.addserver.php
Edit -- https://main.php.net/note/edit/126999
Del: integrated -- https://main.php.net/note/delete/126999/integrated
Del: useless -- https://main.php.net/note/delete/126999/useless
Del: bad code -- https://main.php.net/note/delete/126999/bad+code
Del: spam -- https://main.php.net/note/delete/126999/spam
Del: non-english -- https://main.php.net/note/delete/126999/non-english
Del: in docs -- https://main.php.net/note/delete/126999/in+docs
Del: other reasons-- https://main.php.net/note/delete/126999
Reject -- https://main.php.net/note/reject/126999
Search -- https://main.php.net/manage/user-notes.php