概述
本文作一个小demo,用go你们grpc服务,提供一个查询用户列表的接口。用php作client。php
环境安装:git
安装grpc
安装protobuf
安装protoc-gen-go ,参见:https://github.com/golang/protobuf
安装php的grpc和protobuf组件,能够安装扩展(性能更高一些),也能够经过composer的方式安装。
安装grpc的php_plugin 参见:https://github.com/grpc/grpc/tree/master/src/php
定义proto文件:github
在程序根目录下新建usercenter目录,新建usercenter.proto文件。golang
syntax = "proto3";
package usercenter;
service usercenterservice {
rpc GetUserList (GetUserListReq) returns (GetUserListResp) {
}
}
message GetUserListReq {
int64 page = 1;
int64 pagesize = 2;
}
message UserInfo {
int64 userid = 1;
string username = 2;
string mobile = 3;
}
message GetUserListResp {
repeated UserInfo data = 1;
}
根据proto文件生成相应的go的库文件:json
执行:app
protoc --go_out=plugins=grpc:./ usercenter.proto
server端文件composer
在根目录下新建usercenterserver.gotcp
package main
import (
"context"
"google.golang.org/grpc"
"log"
. "net"
"protobufdemo/usercenter"
)
const (
addr = "127.0.0.1:10023"
)
type server struct{}
func (s *server) GetUserList(ctx context.Context, in *usercenter.GetUserListReq) (*usercenter.GetUserListResp, error) {
var data []*usercenter.UserInfo
temp1 := usercenter.UserInfo{Userid: 1, Username: "zhangsan", Mobile: "13566667777"}
temp2 := usercenter.UserInfo{Userid: 3, Username: "lisi", Mobile: "13899998888"}
data = append(data, &temp1)
data = append(data, &temp2)
return &usercenter.GetUserListResp{Data: data}, nil
}
func main() {
lis, err := Listen("tcp", addr)
if err != nil {
log.Fatal("failed to listen: %v", err)
}
s := grpc.NewServer()
usercenter.RegisterUsercenterserviceServer(s, &server{})
s.Serve(lis)
}
执行 go run usercenterserver.go,启动server端。性能
client端:测试
执行命令,生成对应的类:
protoc --proto_path=./
--php_out=./
--grpc_out=./
--plugin=protoc-gen-grpc=/Users/ccc/work/grpc/bins/opt/grpc_php_plugin
*.proto
编写client文件:
/**
* Class
* 参考:
* https://github.com/grpc/grpc/tree/master/src/php
* 本例采用composer而非扩展来加载protobuf和grpc包
*
* php调用grpc测试
*
* @version:
* @datetime: 2018-12-28 15:10
* @author: guoqiang
* @copyright: ec
*/
function includeIfExists($file) {
if (file_exists($file)) {
return include $file;
} else {
return false;
}
}
function my_autoloader($class) {
$arr = explode("\", $class);
if (in_array($arr[0], ['Usercenter', 'GPBMetadata'])) {
$filename = implode(DIRECTORY_SEPARATOR, $arr) . '.php';
includeIfExists($filename);
}
}
require './vendor/autoload.php';
use GrpcChannelCredentials;
spl_autoload_register('my_autoloader');
$client = new UsercenterusercenterserviceClient('127.0.0.1:10023', ['credentials' => ChannelCredentials::createInsecure()]);
$req = new UsercenterGetUserListReq();
$req->setPage(1);
$req->setPagesize(10);
list($re, $status) = $client->GetUserList($req)->wait();
$result = $re->serializeToJsonString($re);
$result = json_decode($result, true);
var_dump($result);
执行php client.php,即可看到结果。
最后
以上就是高兴方盒为你收集整理的golang grpc php,grpc-protobuf golang作server&php作client的全部内容,希望文章能够帮你解决golang grpc php,grpc-protobuf golang作server&php作client所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复