|
|
|
@ -7,51 +7,122 @@ This directory contains source code for PHP implementation of gRPC layered on sh |
|
|
|
|
|
|
|
|
|
Pre-Alpha : This gRPC PHP implementation is work-in-progress and is not expected to work yet. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## LAYOUT |
|
|
|
|
|
|
|
|
|
Directory structure is as generated by the PHP utility |
|
|
|
|
[ext_skel](http://php.net/manual/en/internals2.buildsys.skeleton.php) |
|
|
|
|
|
|
|
|
|
## ENVIRONMENT |
|
|
|
|
|
|
|
|
|
Install `php5` and `php5-dev`. |
|
|
|
|
|
|
|
|
|
To run the tests, additionally install `php5-readline` and `phpunit`. |
|
|
|
|
To run the tests, additionally install `phpunit`. |
|
|
|
|
|
|
|
|
|
Alternatively, build and install PHP 5.5 or later from source with standard |
|
|
|
|
configuration options. |
|
|
|
|
|
|
|
|
|
To also download and install protoc and the PHP code generator. |
|
|
|
|
## Build from Homebrew |
|
|
|
|
|
|
|
|
|
On Mac OS X, install [homebrew][]. On Linux, install [linuxbrew][]. Run the following command to |
|
|
|
|
install gRPC. |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ curl -fsSL https://goo.gl/getgrpc | bash -s php |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
This will download and run the [gRPC install script][] and compile the gRPC PHP extension. |
|
|
|
|
|
|
|
|
|
## Build from Source |
|
|
|
|
|
|
|
|
|
Clone this repository |
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
$ git clone https://github.com/grpc/grpc.git |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Build and install the Protocol Buffers compiler (protoc) |
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
$ cd grpc |
|
|
|
|
$ git pull --recurse-submodules && git submodule update --init --recursive |
|
|
|
|
$ cd third_party/protobuf |
|
|
|
|
$ ./autogen.sh |
|
|
|
|
$ ./configure |
|
|
|
|
$ make |
|
|
|
|
$ make check |
|
|
|
|
$ sudo make install |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Build and install the gRPC C core |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc |
|
|
|
|
$ make |
|
|
|
|
$ sudo make install |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Build the gRPC PHP extension |
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
apt-get install -y procps |
|
|
|
|
curl -sSL https://get.rvm.io | sudo bash -s stable --ruby |
|
|
|
|
git clone git@github.com:google/protobuf.git |
|
|
|
|
cd protobuf |
|
|
|
|
./configure |
|
|
|
|
make |
|
|
|
|
make install |
|
|
|
|
git clone git@github.com:murgatroid99/Protobuf-PHP.git |
|
|
|
|
cd Protobuf-PHP |
|
|
|
|
rake pear:package version=1.0 |
|
|
|
|
pear install Protobuf-1.0.tgz |
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php/ext/grpc |
|
|
|
|
$ phpize |
|
|
|
|
$ ./configure |
|
|
|
|
$ make |
|
|
|
|
$ sudo make install |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
## BUILDING |
|
|
|
|
In your php.ini file, add the line `extension=grpc.so` to load the extension |
|
|
|
|
at PHP startup. |
|
|
|
|
|
|
|
|
|
1. In ./ext/grpc, run the command `phpize` (distributed with PHP) |
|
|
|
|
2. Run `./ext/grpc/configure` |
|
|
|
|
3. In ./ext/grpc, run `make` and `sudo make install` |
|
|
|
|
4. In your php.ini file, add the line `extension=grpc.so` to load the |
|
|
|
|
extension at PHP startup. |
|
|
|
|
Install Composer |
|
|
|
|
|
|
|
|
|
## PHPUnit |
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php |
|
|
|
|
$ curl -sS https://getcomposer.org/installer | php |
|
|
|
|
$ php composer.phar install |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
## Unit Tests |
|
|
|
|
|
|
|
|
|
Run unit tests |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php |
|
|
|
|
$ ./bin/run_tests.sh |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
## Generated Code Tests |
|
|
|
|
|
|
|
|
|
Install `protoc-gen-php` |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php/vendor/datto/protobuf-php |
|
|
|
|
$ gem install rake ronn |
|
|
|
|
$ rake pear:package version=1.0 |
|
|
|
|
$ sudo pear install Protobuf-1.0.tgz |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Generate client stub code |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php |
|
|
|
|
$ ./bin/generate_proto_php.sh |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Run a local server serving the math services |
|
|
|
|
|
|
|
|
|
- Please see [Node][] on how to run an example server |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/node |
|
|
|
|
$ npm install |
|
|
|
|
$ nodejs examples/math_server.js |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Run the generated code tests |
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
$ cd grpc/src/php |
|
|
|
|
$ ./bin/run_gen_code_test.sh |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
This repo now has PHPUnit tests, which can by run by executing |
|
|
|
|
`./bin/run_tests.sh` after building. |
|
|
|
|
[homebrew]:http://brew.sh |
|
|
|
|
[linuxbrew]:https://github.com/Homebrew/linuxbrew#installation |
|
|
|
|
[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install |
|
|
|
|
[Node]:https://github.com/grpc/grpc/tree/master/src/node/examples |
|
|
|
|
|
|
|
|
|
There is also a generated code test (`./bin/run_gen_code_test.sh`), which tests |
|
|
|
|
the stub `./tests/generated_code/math.php` against a running localhost server |
|
|
|
|
serving the math service. That stub is generated from |
|
|
|
|
`./tests/generated_code/math.proto`. |
|
|
|
|