通過gRPC讓PHP呼叫Go的服務

2022-07-28 05:03:14 字數 1935 閱讀 1731

*由於篇幅限制,本文只能提供乙個簡單的使用流程,不會對具體的概念深入解釋

你至少需要了解的基本知識: php, composer, go, protobuf, grpc

#第一步:編寫 .proto 檔案

在本例中,我們定義乙個計算器類,擁有相加,相減兩個方法,以及定義引數和返回值的型別

syntax = "

proto3

"; //

使用的proto3語法版本

package grpc_test; //

包名//

定義乙個服務,包含兩個方法

service calculator

rpc reduce (requestdata) returns (responsedata) {}}//

定義乙個請求型別

message requestdata

//定義乙個返回型別

message responsedata

#使用protoc編譯器編譯 .proto 檔案

protoc -i ./proto \

./proto/grpc_test.proto \

--php_out=./php_src \

--go_out=plugins=grpc:./go_src \

--grpc_out=./php_src \

--plugin=protoc-gen-grpc=/opt/share/grpc_php_plug

該命令執行後,會在go_src下生成相關的go**,php_src下生成對應的php**

#利用生成的go**編寫grpc服務

package main

import (

"context""

fmt"

"google.golang.org/grpc

"pb

"grpc_test/go_src"//

引入了生成的go**

"log""

net"

)func main()

s :=grpc.newserver()

pb.registercalculatorserver(s, &server{})

if err := s.serve(lis); err !=nil

}type server struct

func (s *server) add(ctx context.context, in *pb.requestdata) (*pb.responsedata, error) , nil

}func (s *server) reduce(ctx context.context, in *pb.requestdata) (*pb.responsedata, error) , nil

}

#編譯並執行**,服務就開始監聽了

#準備php環境

這一部分稍微就麻煩點,需要安裝兩個擴充套件grpc,protobuf 可以通過pecl安裝:

pecl install

grpc

pecl

install

protobuf

安裝後在對應的php.ini檔案中新增

extension=grpc.so

extension=protobuf.so

#編寫php客戶端呼叫**

use grpc\channelcredentials;

use grpc_test\calculatorclient;

use grpc_test\requestdata;

class grpctest

}如果一切順利,這裡應該列印出最終結果 20

#最後梳理一下整個流程

1.首先編寫proto檔案

2.生成對應的服務端和客戶端輔助**

3.借助輔助**編寫服務端和客戶端

gRPC的簡單Go例子

grpc是乙個高效能 通用的開源rpc框架,其由google主要面向移動應用開發並基於http 2協議標準而設計,基於protobuf protocol buffers 序列化協議開發,且支援眾多開發語言。grpc提供了一種簡單的方法來精確地定義服務和為ios android和後台支援服務自動生成可...

跨語言的GRPC呼叫

這次我們測試go與python之間的grpc呼叫。go作為grpc的客戶端,python作為grpc的服務端。第一步 安裝go的grpc工具 第二步 安裝python的grpc工具 pip install grpcio tools首先新建hello.proto檔案,該檔案很簡單,就是定義了乙個服務介...

Go微服務 grpc的簡單使用

我的是windows,將壓縮包bin目錄下的exe放到環境path目錄中即可。然後獲取外掛程式支援庫 grpc執行時介面編譯碼支援庫 從 proto檔案 grpc介面描述檔案 生成 go檔案 的編譯器外掛程式 go get u github.com golang protobuf protoc ge...