php使用grpc简单教程

来源:互联网 发布:宽带无网络 编辑:程序博客网 时间:2024/06/03 19:14

GRPC PHP客户端实现教程

依赖工具

本demo要实现的是通过php-fpm(非cli)调用grpc与远程服务进行交互。- nginx 1.8.0+- gcc 4.8+- php5.6+- grpc c library- protoc- php grpc extension

grpc使用方法

  1. 使用命令: 使用下面这个命令生成客户端存根stub

    $ protoc --proto_path=./ --plugin=protoc-gen-grpc=/usr/local/grpc/bins/opt/grpc_php_plugin --php_out=./ --grpc_out=./ user.proto 
    • protoc: protoc编译器可执行文件的地址
    • –plugin: protoc-gen-grpc可执行文件的地址,该可执行文件在安装c library时会默认生成,位置是:/usr/local/grpc/bins/opt/grpc_php_plugin
    • –php_out: 指定类和文件生成
    • user.proto 自定义的protoc协议文件
  2. 使用composer安装插件

    $ vim composer.json{     "name": "grpc/grpc-dev",     "description": "gRPC library for PHP - for Developement use only",     "license": "BSD-3-Clause",     "version": "1.4.3",     "require": {         "php": ">=5.5.0",         "google/protobuf": "^v3.3.0"     },     "require-dev": {         "google/auth": "v0.9"     },     "autoload": {         "psr-4": {             "Grpc\\": "lib/Grpc/",             "GPBMetadata\\": "GPBMetadata/",            "Ytzb\\Ytb\\Proto\\User\\": "Ytzb/Ytb/Proto/User/" //自动加载命令空间下的类        }     } }:wq$ curl -sS https://getcomposer.org/installer | sudo php $ php composer.phar install
  3. 代码中require autoload.php即可使用

工具安装(方法1)

  1. 安装gcc 4.8

    $ cd /tmp $ wget http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz $ tar -zxvf gcc-4.8.2.tar.gz $ cd gcc-4.8.2 $ ./contrib/download_prerequisities $ ./configure --prefix=/usr --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib $ make -j8 && sudo make install $ ln -s 将可执行文件链接或拷贝到/usr/local/bin和/usr/bin目录下   
    • 检查安装是否成功: 安装位置的gcc -v, g++ -v
    • 安装参考:参考一、参考二
  2. grpc c library安装

    $ cd /usr/local$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc$ cd /usr/local/grpc $ git pull --recurse-submodules && git submodule update --init --recursive $ make -j8 $ sudo make install 

    注:
    以上git命令需要git版本>=1.7.3,centOS yum安装的git低于该版本,如果服务器上未安装高版本git,请根据以下命令进行编译安装:

    $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc $ yum install gcc perl-ExtUtils-MakeMaker $ yum remove git (如果之前有默认安装了git,请移除) $ cd /tmp/ $ wget https://www.kernel.org/pub/software/scm/git/git-2.1.2.tar.gz $ tar -zxvf git-2.1.2.tar.gz $ cd git-2.1.2 $ make -j8 configure $ ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv $ make -j8 all doc $ sudo make install install-doc install-html 

    检查是否安装成功:

    /usr/local/git/bin/git --version 

    安装成功后,将git可执行文件copy或者软链到 /usr/bin /usr/local/bin 两个目录下
    如果安装过程中提示libiconv不存在,请先安装libiconv,然后再make clean, make && sudo make install:

    $ cd /tmp $ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz $ tar -zxvf libiconv-1.14.tar.gz $ cd libiconv-1.14 $ ./configure --prefix=/usr/local/libiconv $ make -j8 && sudo make install 
  3. php grpc extension安装

    grpc依赖的c library安装完成后,安装php grpc扩展

    $ cd /usr/local/grpc/src/php/ext/grpc $ phpize (若提示命令不存在,请全路径执行,即/usr/local/php/bin/phpize,取决于服务器php的安装路径) $ ./configure --with-php-config=/usr/local/php/bin/php-config (php-config路径) $ make -j8$ sudo make install $ vim php.ini 加入extension=grpc.so 
    • 检测php grpc扩展是否安装成功 php –ri grpc 或者 php -m | grep grpc
    • php-fpm要使用grpc请重启nginx和php-fpm
    • 注: 命令行执行php文件提示Warning: insecure environment read function getenv used,请修改c文件/tmp/grpc/src/core/lib/support/env_linux.c
      注释掉相关的gpr_log,然后重新进入grpc目录更新c library,即make clean然后make && sudo make install
  4. protoc 编译器安装

    $ cd /tmp $ wget https://github.com/google/protobuf/releases/download/v3.2.0/protobuf-php-3.2.0.tar.gz $ tar -zxvf protobuf-php-3.2.0.tar.gz $ cd protobuf-php-3.2.0 $ ./configure --prefix=/usr/local/protobuf $ make -j8$ sudo make install 
    • 检测是否安装成功, /usr/local/protobuf/bin/protoc –version
    • 安装成功后,请将protoc可执行文件copy或者软链到/usr/local/bin和/usr/bin目录下
  5. 所有预装软件安装升级完成后,删除源码(可选)

    rm -rf /tmp/gcc-4.8.2* rm -rf /tmp/git-2.1.2* rm -rf /tmp/libiconv-1.14* rm -rf /tmp/protobuf-php-3.2.0* 
  6. 安装升级过程中可能出现的问题

    • /lib64/libstdc++.so.x: version: `GLIBCXX_X.X.XX’ not found
      提示你cmake时libstdc++.so.x中缺少GLIBCXX_X.X.XX或更高版本
      解决办法: (这libstdc++.so.x中的x根据是数字)

      1. 先确保所有旧版本gcc、cc、g++已被全部替换,再重新执行编译安装,如果仍然提示该错误,请执行2解决
      2. 核实该文件中都有哪些版本,可以看出确实缺少了该版本
        strings /usr/lib64/libstdc++.so.x | grep GLIBCXX 

      查找新安装的gcc路径下是否有包含GLIBCXX_X.X.XX(gcc 4.8中肯定会包含的)

      strings /usr/local/lib64/libstdc++.so.x | grep GLIBCXX 

      看到该文件里确实包含了该版本,那么把这份文件软链到提示缺失的位置(包含新版本的该份文件可能与原文件不同名)

      cd /usr/lib64 mv libstdc++.so.x libstdc++.so.x.old cp /usr/local/lib64/libstdc++.so.x.xx(新文件) /usr/lib64/ ln -s libstdc++.so.x.xx(新文件) libstdc++.so.x
    • 安装各个软件过程中,如提示其他错误,缺失则安装,其他则请google或baidu解决。

工具安装(方法2)

  1. 一次性安装所有依赖包:

    $ yum install cmake sqlite-devel bzip2-devel libcurl-devel enchant-devel gmp-devel libicu-devel openldap-devel mysql-devel unixODBC-devel aspell-devel libedit-devel recode-devel net-snmp-devel libtidy-devel libxml2-devel pcre-devel libjpeg-devel libpng-devel libXpm-devel freetype-devel libxslt-devel gcc-c++ -y
  2. 安装PHP5.6(可选,如果服务器上还未装的话)

    下载地址: http://php.net/downloads.php

    $ wget http://php.net/downloads.php(对应版本的地址)$ ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so(可选,软链一下mysql库)$ './configure' '--prefix=/usr/local/php' '--with-libxml-dir=/usr/lib' '--with-gd' '--with-zlib' '--with-mysql=/usr' '--enable-sockets' '--enable-mbstring' '--enable-safe-mode' '--enable-ftp' '--with-png' '--with-freetype-dir=/usr' '--with-jpeg' '--with-sqlite=shared' '--with-openssl'$ make -j8$ sudo make install$ vim /usr/local/php/bin 添加PATH环境变量
  3. 直接升级GCC到4.8

    $ wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo$ yum install --nogpgcheck devtoolset-2$ scl enable devtoolset-2 bash
  4. 安装grpc c library

    $ git clone --recursive -b v1.3.x https://github.com/grpc/grpc$ cd grpc$ make -j8$ make install
  5. php extension 安装

    $ cd /usr/local/grpc/src/php/ext/grpc$ phpize$ ./configure$ make -j8$ make install

    在php.ini中加入: extension=grpc.so

参考文献

  • https://github.com/grpc/grpc/tree/master/src/php#generated-code-tests
  • http://www.grpc.io/docs/quickstart/php.html
  • http://www.grpc.io/docs/tutorials/basic/php.html
  • http://www.grpc.io/
  • https://gist.github.com/stephenturner/e3bc5cfacc2dc67eca8b
  • https://github.com/grpc/grpc/tree/master/src/php
  • https://github.com/grpc/grpc/blob/master/src/core/lib/support/env_linux.c
  • http://doc.oschina.net/grpc?t=58008#quickstart
  • http://www.jianshu.com/p/fa126a8535a0
  • http://blog.csdn.net/u012580566/article/details/53515938
  • http://blog.csdn.net/zimiao815/article/details/51242814
原创粉丝点击