Share
Embed
php grpc-client in phpcon2018
About grpc-client and use case of that for PHP
shmurakami
December 15, 2018
Transcript
45 slides
-
© Chatwork 1SPUPDPM#VGGFST ˔ߏσʔλͷγϦΞϥΠζϝΧχζϜ ˓3FRVFTU3FTQPOTFͷ4FSJBMJ[FSͱͯ͠H31$ͷσϑΥϧ τʹͳ͍ͬͯΔ ˔*%- *OUFSGBDF%FGJOJUJPO-BOHVBHF ˓3FRVFTU3FTQPOTFΛఆٛ͢Δ%4-
QSPUP ˓αʔόʔΫϥΠΞϯτ͕ڞ௨Ͱ༻͢Δ"1*ϑΥʔϚοτ Λ౷ҰͰ͖Δ -
© Chatwork 1SPUPDPM#VGGFSTTBNQMF syntax = “proto3"; message Person { string
name = 1; string email = 2; enum PhoneType { MOBILE = 0; HOME = 1; } message PhoneNumber { string number = 1; PhoneType type = 2; } } service GreetingService { rpc greet (Person) returns (stream PersonResponse); } -
© Chatwork QSPUPDίϚϯυαϯϓϧ $ protoc \ --proto_path=./proto \ --php_out=./dest \
--grpc_out=./dest \ --plugin=protoc-gen-grpc=./grpc/bins/opt/grpc_php_plugin \ ./proto/sample.proto -
© Chatwork ੜϑΝΠϧ $ tree dest ├── GPBMetadata │ └──
Sample.php ├── GreetingServiceClient.php ├── Person │ ├── PhoneNumber.php │ └── PhoneType.php ├── Person.php proto └── sample.proto syntax = “proto3"; message Person { string name = 1; string email = 2; enum PhoneType { MOBILE = 0; HOME = 1; } message PhoneNumber { string number = 1; PhoneType type = 2; } } service GreetingService { rpc greet (Person) returns (stream PersonResponse); } -
© Chatwork ੜϑΝΠϧ <?php class Person extends \Google\Protobuf\Internal\Message { private
$name = ''; private $email = ''; public function __construct($data = NULL) { /*...*/ } public function getName() { return $this->name; } public function setName($var) { /*...*/ } public function getEmail() { return $this->email; } public function setEmail($var) { /*...*/ } } -
© Chatwork ੜϑΝΠϧ <?php // GENERATED CODE -- DO NOT
EDIT! namespace ; class GreetingServiceClient extends \Grpc\BaseStub { public function __construct($hostname, $opts, $channel = null) { parent::__construct($hostname, $opts, $channel); } public function greet(\Person $argument, $metadata = [], $options = []) { return $this->_serverStreamRequest('/GreetingService/greet', $argument, ['\PersonResponse', 'decode'], $metadata, $options); } } -
© Chatwork %PDLFSGJMFྫ FROM amazonlinux:2018.03 RUN yum update -y &&
\ yum install -y \ # grpc dependencies git gcc gcc48-c++ autoconf automake libtool unzip which wget # download protoc RUN mkdir /opt/protoc && \ wget -O /opt/protoc/protoc.zip https://github.com/protocolbuffers/protobuf/ releases/download/v3.5.1/protoc-3.5.1-linux-x86_64.zip \ && unzip -d /opt/protoc /opt/protoc/protoc.zip \ && rm /opt/protoc/protoc.zip # build grpc_php_plugin RUN git clone https://github.com/grpc/grpc /opt/grpc \ && cd /opt/grpc \ && git submodule update --init \ && cd /opt/grpc/third_party/protobuf \ && sh autogen.sh \ && cd /opt/grpc \ && make grpc_php_plugin -
© Chatwork H31$௨৴ ˔H31$௨৴ॲཧͷ࣮ମ ˓H31$FYUFOTJPO$ Ͱ࡞ΒΕ͓ͯΓ1)1֦ுΛΠϯε τʔϧ͢Δ ˓1&$-Ͱ͞Ε͍ͯΔ HSQD
˔HSQDϥΠϒϥϦ ˓HSQD֦ுΛૢ࡞͢ΔͨΊͷϥΠϒϥϦ ˓$PNQPTFSͰ͞Ε͍ͯΔ HSQDHSQD -
© Chatwork 3FRVFTU3FTQPOTF4FSJBMJ[FS ˔1SPUPDPM#VGGFSTͷ1)1֦ு QSPUPCVG ͕ͦΕ ˓1&$- QSPUPCVG ͘͠ ˓$PNQPTFS
HPPHMFQSPUPCVG Ͱఏڙ͞Ε͍ͯΔ ˓֦ுͷํ͕$PNQPTFSΑΓύϑΥʔϚϯε͕༏Ε͍ͯΔ ˙֦ுΛ͏Α͏ʹ͢Δͱ1IQ4UPSNͰίʔυิ͕ ޮ͔ͳ͍ͷͰSFRVJSFEFWͰೖΕ͍ͯΔ -
© Chatwork ґଘίϯϙʔωϯτͷόʔδϣϯ ˔HSQD QSPUPCVG QSPUPDͷόʔδϣϯޓੑΛอͭඞཁ͕͋Δ ˓ͦΕͧΕͷೖखܦ࿏͕ҧ͏ ˓1&$- $PNQPTFS (JU)VCSFMFBTFQBHF
˓1)1࣮ߦ࣌ͰͷΤϥʔ·Ͱʹؾͮ͘λΠϛϯά͕ແ͍ ˙ΤϥʔʹͳͬͯϥΠϒϥϦͷத·ͰίʔυΛݟʹߦ ͔ͳ͍ͱԿ͕͓͔͍͔͔͠Βͳ͍ -
© Chatwork ґଘίϯϙʔωϯτͷόʔδϣϯ ˔ޓੑ͕͔ΓͮΒ͍ ˓ެࣜυΩϡϝϯτ͕ߋ৽͞Εͳ͍ ˔࠷৽൛ ࣌ ˓HSQD ˓QSPUPCVG
˔3FMFBTFT/PUFTΛݟͯؤுΔʜ grpc.io github -
© Chatwork Ϣʔεέʔε [info][title]PHPCon2018:)[/title]PHPͰgRPCಈ͔͍ͨ͠Ͱ͢Ͷ (bow)[/info] {“tokens":[ {“info”:{"title":[{"text":"PHPCon2018"},{"emoticonSmile":{}}], “message":[ {“text":"PHPͰgRPCಈ͔͍ͨ͠Ͱ͢Ͷ"},{"emoticonBow":{}} ]}}
]} ASTԽ ˔ৄࡉϒϩά͕ޙॻ͔Ε·͢ʂ ˓IUUQTDSFBUPSTOPUFDIBUXPSLDPN -
© Chatwork ύϑΥʔϚϯε ˔H31$ͷॲཧΛೖΕΔલޙͰͷฏۉϨεϙϯελΠϜͷൺֱ ˓"84ಉҰ71$ͷ&$ؒ௨৴ LTܦ༝ ˙ҎԼࢀߟͱͯ͠ϩʔΧϧڥͷൺֱ ಋೖલ H31$͋Γ
ฏۉ NT ˔ϩʔΧϧͰେମNTఔͷ૿Ճ ˓+40/4USJOHΛฦ͚ͩ͢ͷ"1*͕OHJOYܦ༝ͰNT