我是靠谱客的博主 高兴方盒,最近开发中收集的这篇文章主要介绍golang grpc php,grpc-protobuf golang作server&php作client,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文作一个小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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部