博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gprc-java与golang分别实现服务端,客户端,跨语言通信(二.golang实现)
阅读量:5140 次
发布时间:2019-06-13

本文共 2076 字,大约阅读时间需要 6 分钟。

1.编译器protoc, 下载地址:https://github.com/protocolbuffers/protobuf/releases  (下载对应的版本, 解压后放到go的bin中)

2.安装golang扩展, go get -u github.com/golang/protobuf/protoc-gen-go

3.grpc库, git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/gprc

4.编写DIL文件

syntax = "proto3"; package helloworld; // The greeting service definition. service Greeter {
// Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest {
string name = 1; } // The response message containing the greetings message HelloReply {
string message = 1; } 5.生成文件, 在IDL文件目录执行: protoc --go_out=plugins=grpc:. ./hello.proto 6.服务端代码:
package main import (    "fmt"    "golang.org/x/net/context"    "google.golang.org/grpc"    "net"    pb "IDL文件生成的hello.pb.go" ) type service struct{} //声明一个结构体, 实现服务 func (s *service) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) { //服务逻辑, 出入参要和hello.pd.go中的方法一样    name := req.Name //请求结构体中的数据    fmt.Println("this is golang service, request...", name)    return &pb.HelloReply{
Message: "this is golang service", //返回数据 }, nil } func main() {
lis, err := net.Listen("tcp", ":50001") if err != nil {
panic(err) } s := grpc.NewServer() pb.RegisterGreeterServer(s, &service{}) //注册 _ = s.Serve(lis) }

7.客户端代码

package main import (    "fmt"    "golang.org/x/net/context"    "google.golang.org/grpc"    "hello.pb.go" ) func main() {
conn, err := grpc.Dial("localhost:50001", grpc.WithInsecure()) //连接 if err != nil {
fmt.Println(err) } defer conn.Close() hc := helloworld.NewGreeterClient(conn) res, err := hc.SayHello(context.Background(), &helloworld.HelloRequest{
Name: "this is golang client request", }) if err != nil {
fmt.Println(err) } fmt.Println("this is golang client, response...", res.Message) } java与go的客户端和服务端代码都完成了, 并且可以跨语言调用

跨语言通信需要注意, IDL一定要一致, IDL中的package定义也一定要一致, 是grpc服务名的一部分

 

 

 

 

 
 

转载于:https://www.cnblogs.com/-xuzhankun/p/11082429.html

你可能感兴趣的文章
如何在maven工程中加载oracle驱动
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>