热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php使用grpc简单教程

GRPCPHP客户端实现教程依赖工具本demo要实现的是通过php-fpm(非cli)调用grpc与远程服务进行交互。-nginx1.8.0-gcc4.8-php5.6-

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

推荐阅读
author-avatar
大男孩小男淫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有