note 126999 added to gearmanclient.addserver

From: 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

« previous php.notes (#218300) next »