PHP code example of swoole / grpc
1. Go to this page and download the library: Download swoole/grpc library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
swoole / grpc example snippets
$greeterClient = new GreeterClient('127.0.0.1:50051');
$request = new HelloRequest();
$request->setName('Swoole');
list($reply, $status) = $greeterClient->SayHello($request);
$message = $reply->getMessage();
echo "{$message}\n"; // Output: Hello Swoole
use Swoole\Coroutine;
Coroutine::create(function () {
$kvClient = new Etcdserverpb\KVClient(GRPC_SERVER_DEFAULT_URI);
$request = new Etcdserverpb\PutRequest();
$request->setPrevKv(true);
$request->setKey('Hello');
$request->setValue('Swoole');
[$reply, $status] = $kvClient->Put($request);
if ($status === 0) {
echo "{$reply->getPrevKv()->getKey()}\n";
echo "{$reply->getPrevKv()->getValue()}\n";
} else {
echo "Error#{$status}: {$reply}\n";
}
$kvClient->close();
});
use Etcdserverpb\WatchCreateRequest;
use Etcdserverpb\WatchCreateRequest\FilterType;
use Etcdserverpb\WatchRequest;
use Swoole\Coroutine;
// The Watcher
Coroutine::create(function () {
$watchClient = new Etcdserverpb\WatchClient(GRPC_SERVER_DEFAULT_URI);
$watchCall = $watchClient->Watch();
$request = new WatchRequest();
$createRequest = new WatchCreateRequest();
$createRequest->setKey('Hello');
$request->setCreateRequest($createRequest);
_retry:
$watchCall->push($request);
/**@var $reply Etcdserverpb\WatchResponse */
while (true) {
[$reply, $status] = $watchCall->recv();
if ($status === 0) { // success
if ($reply->getCreated() || $reply->getCanceled()) {
continue;
}
foreach ($reply->getEvents() as $event) {
/**@var $event Mvccpb\Event */
$type = $event->getType();
$kv = $event->getKv();
if (FilterType::NOPUT === $type) {
echo "Put key {$kv->getKey()} => {$kv->getValue()}\n";
break;
} elseif (FilterType::NODELETE === $type) {
echo "Delete key {$kv->getKey()}\n";
break;
}
}
} else { // failed
static $retry_time = 0;
if ($watchClient->isConnected()) {
$retry_time++;
echo "Retry#{$retry_time}\n";
goto _retry;
} else {
echo "Error#{$status}: {$reply}\n";
break;
}
}
}
$watchClient->close();
});
// The Writer Put and Delete
Coroutine::create(function () {
$kvClient = new Etcdserverpb\KVClient(GRPC_SERVER_DEFAULT_URI);
Coroutine::create(function () use ($kvClient) {
$request = new Etcdserverpb\PutRequest();
$request->setKey('Hello');
$request->setPrevKv(true);
while (true) {
static $count = 0;
Coroutine::sleep(.5);
$request->setValue('Swoole#' . (++$count));
[$reply, $status] = $kvClient->Put($request);
if ($status !== 0) {
echo "Error#{$status}: {$reply}\n";
break;
}
}
$kvClient->close();
});
Coroutine::create(function () use ($kvClient) {
$request = new Etcdserverpb\DeleteRangeRequest();
$request->setKey('Hello');
$request->setPrevKv(true);
while (true) {
Coroutine::sleep(1);
[$reply, $status] = $kvClient->DeleteRange($request);
if ($status !== 0) {
echo "Error#{$status}: {$reply}\n";
break;
}
}
$kvClient->close();
});
});
use Swoole\Coroutine;
Coroutine::create(function () {
$grpcClient = new Grpc\Client(GRPC_SERVER_DEFAULT_URI);
// use in different type clients
Coroutine::create(function () use ($grpcClient) {
$kvClient = new Etcdserverpb\KVClient(GRPC_SERVER_DEFAULT_URI, ['use' => $grpcClient]);
$request = new Etcdserverpb\PutRequest();
$request->setPrevKv(true);
$request->setKey('Hello');
$request->setValue('Swoole');
[$reply, $status] = $kvClient->Put($request);
if ($status === 0) {
echo "\n=== PUT KV OK ===\n";
} else {
echo "Error#{$status}: {$reply}\n";
}
});
Coroutine::create(function () use ($grpcClient) {
$authClient = new Etcdserverpb\AuthClient(GRPC_SERVER_DEFAULT_URI, ['use' => $grpcClient]);
$userRequest = new Etcdserverpb\AuthUserAddRequest();
$userNames = ['ranCoroutine::create', 'twosee', 'gxh', 'stone', 'sjl'];
foreach ($userNames as $username) {
$userRequest->setName($username);
[$reply, $status] = $authClient->UserAdd($userRequest);
if ($status !== 0) {
goto _error;
}
}
$useListRequest = new Etcdserverpb\AuthUserListRequest();
[$reply, $status] = $authClient->UserList($useListRequest);
if ($status !== 0) {
goto _error;
}
echo "\n=== SHOW USER LIST ===\n";
foreach ($reply->getUsers() as $user) {
/**@var \Authpb\User */
echo "* {$user}\n";
}
echo "=== SHOW USER LIST OK ===\n";
$userRequest = new Etcdserverpb\AuthUserDeleteRequest();
foreach ($userNames as $username) {
$userRequest->setName($username);
[$reply, $status] = $authClient->UserDelete($userRequest);
if ($status !== 0) {
goto _error;
}
}
if (false) {
_error:
echo "Error#{$status}: {$reply}\n";
}
echo "\n=== SHOW ALL CLIENT STATS ===\n";
var_dump(grpc_client_num_stats());
$grpcClient->close();
});
});