go get github.com/golang/protobuf/protoc-gen-go

go get github.com/golang/protobuf/proto

proto文件

syntax="proto3";

package prod;

message ProdRequest{

int32 prod_id=1; // 商品id

}

message ProdResponse{

int32 prod_stock=1; // 商品库存

}

命令protoc --go_out=. prodService.proto生成go文件

rpc server 代码

package main

import (

"net"

"net/rpc"

"net/rpc/jsonrpc"

prod "think/pb"

)

type ProdService struct {

}

// GetStock 获取库存

// 随便模拟一下商品库存

func (s *ProdService) GetStock(req prod.ProdRequest,res *prod.ProdResponse) error{

if req.ProdId==1 {

res.ProdStock=10

}else {

res.ProdStock=0

}

return nil

}

func main() {

listener, _:=net.Listen("tcp",":30000")

rpc.Register(new(ProdService))

for {

conn,_:=listener.Accept()

jsonrpc.ServeConn(conn)

}

}

rpc client 代码

package main

import (

"fmt"

"net/rpc/jsonrpc"

prod "think/pb"

)

func main() {

client,err :=jsonrpc.Dial("tcp","127.0.0.1:30000")

if err!=nil {

fmt.Println(err)

return

}

res:=prod.ProdResponse{}

err=client.Call("ProdService.GetStock",prod.ProdRequest{ProdId:10},&res)

if err != nil {

fmt.Println(err)

return

}

fmt.Println(res.ProdStock)

}

php调用

$fp = stream_socket_client('tcp://127.0.0.1:30000',$errno,$msg,3);

if (!$fp) {

echo "$msg ($errno)
\n";

return;

}

fwrite($fp, json_encode([

'method' => 'ProdService.GetStock',

'params' => [['prod_id' => 1]],

'id' => 0

])."\n");

echo fgets($fp);

fclose($fp);

返回

{"id":0,"result":{"prod_stock":5},"error":null}

PHP probuf详细步骤_go+protobuf+php简单示例相关推荐

  1. PHP probuf详细步骤_初识protobuf和php的相关用法

    前言 大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施.开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无 ...

  2. 无线网络渗透测试系列学习(二) - 在VMware中搭建Metasploit靶机的详细步骤以及端口的简单了解

    引言: 无线网络渗透测试系列学习目录: 无线网络渗透测试系列学习(一) - 在Windows系统下使用虚拟机安装Kali Linux操作系统 在上一篇文章中我们讲解了在Windows下如何在VMwar ...

  3. Windows安装mysql详细步骤(通俗易懂,简单上手)

    前期在windows电脑尝试安装mysql,经历诸多不顺,特把安装详细步骤以及遇见的问题记录下来,提供给有需者使用.配置过程主要分为五个步骤,如下所示: (1)确认本地是否安装mysql (2)下载m ...

  4. PHP probuf详细步骤_【转】protobuffer php使用

    收藏一篇文章 没有实际操作过 . 公司再用都是直接用现成的东西 这片文章收藏一下 protobuffer是google推出的一种数据传的方式,具体压缩,体积小的特点 protobuffer本身不支持p ...

  5. 最详细步骤加注释jq简单实现购物车选中并计算价格

    实现的功能: 1.点击全选按钮是其他按钮也选中,并计算选中所有的商品价格 2.取消全选按钮,价格重新计算 3.单点每个商品的按钮并计算价格 小知识点(有空时小知识点要多回顾一下哦,加深记忆):     ...

  6. Learn OpenGL(七)——OpenGL中使用着色器的基本步骤及GLSL渲染简单示例

    OpenGL着色语言(OpenGL Shading Language,GLSL)是用来在OpenGL中着色编程的语言,是一种具有C/C++风格的高级过程语言,同样也以main函数开始,只不过执行过程是 ...

  7. win7怎么修改oracle登陆密码,win7账户密码如何修改|win7修改账户密码的详细步骤...

    今天本教程和大家分享win7修改账户密码的详细步骤,为了系统的安全最好经常修改系统的密码,从而保护好我的电脑,保护好我们的资料.还是有很多用户不知道win7账户密码如何修改?网上有很多关于修改账户密码 ...

  8. 贴花纸怎么贴_木纹纸怎么贴? 贴木纹纸的方法与详细步骤

    木纹纸是很常见的装饰纸,很多家具等的表面都是使用的木纹纸进行装饰,那木纹纸怎么贴呢?我们来了解下贴木纹纸的方法与详细步骤,贴木纹纸的防皱技巧: 木纹纸是什么? 木纹纸质是一种表皮装饰纸,其原材料一般是 ...

  9. 磊科nw705p虚拟服务器设置,教你如何设置磊科nw705p无线路由器的详细步骤【图文】...

    路由器的设置其实方法很简单,一般来说安装宽带的时候都会顺便安装上路由器并设置好,但是有用户对于刚买的磊科nw705p无线路由器却不知道如何下手了,对于这个磊科nw705p无线路由器的设置有什么好的方法 ...

最新文章

  1. python语言属于-python属于哪种语言
  2. C# 以管理员身份运行WinForm程序
  3. 基于php5.6 php.ini详解
  4. 中国工程院出台“八不准” 为院士增选“划红线”
  5. windows 开启telnet 功能
  6. QT每日一练day19:设计一个记事本
  7. 中国天然蜡乳液行业市场供需与战略研究报告
  8. 佳铁精雕机连接电脑设置_佳铁精雕机在程式里怎么更改G57之后的坐标
  9. 小米路由器MINI架设WEB服务
  10. 手机取证设备(手机点验设备、手机合规检测、双路并行手机取证深度分析系统、手机点验数据恢复)
  11. CRM客户关系管理分析模型——RFM模型
  12. FANUC机器人示教时遇到奇异点的解决办法
  13. 关于98% after emitting CopyPlugin个人探索
  14. KepServerv设置为OPCUA通讯说明
  15. SQL:查找某个班级的人数并按班级人数多少进行排列,查找各班年龄最小的女生的班级号,学号,姓名,出生日期并按班级号升序排列
  16. 10分钟读懂什么是容器云?
  17. MYSQL报1265和1366错误
  18. Win10 + Ubuntu双系统U盘安装,详细过程(带图解)
  19. notepad html5 mac,用notepad++将DPL格式转为通用格式
  20. 阿里张勇:数据驱动的透明是平台治理的基础

热门文章

  1. 安装ubuntu系统步骤
  2. css怎么使元素绝对定位有过度效果_小猿圈web前端讲解div+css绝对定位和相对定位...
  3. Java黑皮书课后题第2章:2.9(物理:加速度)平均加速度定义为速度的变化量除以这个变化所用的时间,编写程序,提示用户输入以米/秒为单位的起始速度v0,以米/秒为单位的终止速度v1,显示平均加速度
  4. Jenkins Pipeline高级用法-ShareLibrary
  5. 使用@Configuration注解来代替Spring的bean配置
  6. openstack架构及组件特点
  7. iOS Xcode全面剖析
  8. Unreal Engine 4 —— 冷却UI的制作
  9. 1083 矩阵取数问题
  10. python学习四(处理数据)