protoc --plugin=protoc-gen-php-grpc --php_out=<OUTPUT DIRECTORY> --php-grpc_out=<OUTPUT DIRECTORY> simple.proto
protoc-gen-php-grpc
plugin can be downloaded from the roadrunner
releases page.version: "2.7"
grpc:
# GRPC address to listen
#
# This option is required
listen: "tcp://localhost:9001"
# GRPC reflection server [SINCE 2.11]
#
# This option is optional. The reflection server might be activated to use `grpc_cli`, `grpc-ui`, `grpc-curl`, or similar tools to intercept grpc payloads.
reflection_server:
include:
- "path/to/proto1.proto"
- "path/to/proto2.proto"
# Proto files to use [Multiply files since RR v2.6.0]
#
# This option is required. At least one proto file must be specified.
proto:
- "first.proto"
- "second.proto"
# GRPC TLS configuration
#
# This section is optional
tls:
# Path to the key file
#
# This option is required
key: ""
# Path to the certificate
#
# This option is required
cert: ""
# Path to the CA certificate, defines the set of root certificate authorities that servers use if required to verify a client certificate. Used with the `client_auth_type` option.
#
# This option is optional
root_ca: ""
# Client auth type.
#
# This option is optional. Default value: no_client_certs. Possible values: request_client_cert, require_any_client_cert, verify_client_cert_if_given, require_and_verify_client_cert, no_client_certs
client_auth_type: ""
# Maximum send message size
#
# This option is optional. Default value: 50 (MB)
max_send_msg_size: 50
# Maximum receive message size
#
# This option is optional. Default value: 50 (MB)
max_recv_msg_size: 50
# MaxConnectionIdle is a duration for the amount of time after which an
# idle connection would be closed by sending a GoAway. Idleness duration is
# defined since the most recent time the number of outstanding RPCs became
# zero or the connection establishment.
#
# This option is optional. Default value: infinity.
max_connection_idle: 0s
# MaxConnectionAge is a duration for the maximum amount of time a
# connection may exist before it will be closed by sending a GoAway. A
# random jitter of +/-10% will be added to MaxConnectionAge to spread out
# connection storms.
#
# This option is optional. Default value: infinity.
max_connection_age: 0s
# MaxConnectionAgeGrace is an additive period after MaxConnectionAge after
# which the connection will be forcibly closed.
max_connection_age_grace: 0s
# MaxConnectionAgeGrace is an additive period after MaxConnectionAge after
# which the connection will be forcibly closed.
#
# This option is optional: Default value: 10
max_concurrent_streams: 10
# After a duration of this time if the server doesn't see any activity it
# pings the client to see if the transport is still alive.
# If set below 1s, a minimum value of 1s will be used instead.
#
# This option is optional. Default value: 2h
ping_time: 1s
# After having pinged for keepalive check, the server waits for a duration
# of Timeout and if no activity is seen even after that the connection is
# closed.
#
# This option is optional. Default value: 20s
timeout: 200s
# Usual workers pool configuration
pool:
num_workers: 2
max_jobs: 0
allocate_timeout: 60s
destroy_timeout: 60
Server
plugin for the workers pool.Logger
plugin to show log messages.Config
plugin to read and populate plugin's configuration.<?php
/**
* Sample GRPC PHP server.
*/
use Service\EchoInterface;
use Spiral\RoadRunner\GRPC\Server;
use Spiral\RoadRunner\Worker;
require __DIR__ . '/vendor/autoload.php';
$server = new Server(null, [
'debug' => false, // optional (default: false)
]);
$server->registerService(EchoInterface::class, new EchoService());
$server->serve(Worker::create());
syntax = "proto3";
package service;
option go_package = "./;test";
service Test {
rpc Echo (Message) returns (Message) {
}
rpc Throw (Message) returns (Message) {
}
rpc Die (Message) returns (Message) {
}
rpc Info (Message) returns (Message) {
}
rpc Ping (EmptyMessage) returns (EmptyMessage) {
}
}
message Message {
string msg = 1;
}
message EmptyMessage {
}
message DetailsMessageForException {
uint64 code = 1;
string message = 2;
}
To enable mTLS use the following configuration:
version: "2.7"
grpc:
listen: "tcp://localhost:9001"
proto:
- "first.proto"
- "second.proto"
tls:
key: "server-key.pem"
cert: "server-cert.pem"
root_ca: "rootCA.pem"
client_auth_type: request_client_cert
Options for the client_auth_type
are:
request_client_cert
require_any_client_cert
verify_client_cert_if_given
require_and_verify_client_cert
no_client_certs
The reflection server might be activated to use grpc_cli
, grpc-curl
, grpc-ui
, or similar tools to intercept grpc payloads.
Reflection tutorial GoDocs.