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

php使用grpc简单教程相关推荐

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  2. idea 从svn导入多个项目_IDEA导入项目简单教程

    该教程用于IDEA初学者导入eclipse项目,或者导入其他已经写好的Java源程序的简单教程. 我们用IDEA打开一个已经写好的项目源文件时,如果没有配置好,就会出现:JDK配置失误报错.程序无法启 ...

  3. expect简单教程

    expect简单教程 一.概述 expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Pas ...

  4. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  5. Git和Github简单教程

    网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章主要的目标是用较少的时间学习Git和Gi ...

  6. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  7. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  8. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  9. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

最新文章

  1. linux 5556端口,在Linux系统下通过配置iptables实现自动转发报文
  2. UIView 学习知识点
  3. PHP的composer报错 failed loading cafile stream: `C:\Users\Administrator\Ap pData\Local\Temp\opeB1C9.t
  4. Docker镜像大小
  5. 变化很大!2021年THE世界大学排名出炉,这些中国高校表现出色!
  6. 漫步数理统计二十九——函数期望
  7. 计算机内存只认4,为什么电脑的8GB内存只有7.45GB可用?
  8. springboot+vue+element+mybatisplus项目(后端)
  9. Faster R-CNN——学习笔记~
  10. rust笔记5结构体
  11. 滴滴章文嵩:一个人的 20 年开源热情和国内互联网开源运动
  12. golang下的rpc框架jsonrpc理解和使用示例
  13. Symbian S60 自动通话录音
  14. final、finalize、finally异同,以及final关键字如何使用
  15. 嵌入式linux系统开发教程
  16. storm和vgj vgj_风暴很忙:VGJ.Storm新阵容亮相DAC预选赛
  17. 计算机c盘拒绝访问怎么办,怎么解决Win7系统C盘文件拒绝访问
  18. 利用网络劫持解决微信远程域名真机调试Api问题
  19. 万物皆可傅里叶|傅里叶分析之掐死教程(完整版)
  20. 安卓手机阅读器_彩色墨水屏阅读器,BOOX Poke2 Color 使用体验

热门文章

  1. JavaScript 中字符串截取 (+实现)
  2. linux下文件复制、重命名
  3. 在计算机中 汉字系统把一个汉字表示为,计算机问题汉字系统在计算机内把一个汉字表示 – 手机爱问...
  4. 简单有趣,半小时漫画中国史
  5. amd、cmd、esmodule、commonjs区别
  6. 自动计数报警器c语言程序,计数报警器电路设计方案汇总(多款模拟电路设计原理图详解)...
  7. 利用js和jquary制作轮播图
  8. Java中的多线程安全问题
  9. C#毕业设计——基于C#+asp.net+sqlserver的学生成绩管理系统设计与实现(毕业论文+程序源码)——成绩管理系统
  10. 2018年全国专利代理机构发明授权排行榜(TOP100)