首页 > 其他分享 >golang使用grpc

golang使用grpc

时间:2024-06-24 10:31:41浏览次数:17  
标签:err grpc server golang 使用 go hello

(1) 安装protoc,这是通用的,所有语言都需要

​# 下载网址:

https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protoc-3.9.0-win64.zip

解压后将将protoc的bin目录添加到环境变量中  如果不会添加环境变量请百度

运行 protoc --version 查看是否已经添加到环境变量

 

(2)go install github.com/golang/protobuf/protoc-gen-go  我好像没有用到

(3) 新建golang项目 我使用的是goland  go版本用1.21  刚开始用1.16会运行不了

在项目新建文件夹 grpc_proto   在此文件夹下编写一个 hello.proto

syntax = "proto3"; // 指定proto版本
package hello_grpc;     // 指定默认包名
 
// 指定golang包名
option go_package = "/hello_grpc";
 
//定义rpc服务
service HelloService {
  // 定义函数
  rpc SayHello (HelloRequest) returns (HelloResponse) {}
}
 
// HelloRequest 请求内容
message HelloRequest {
  string name = 1;
  string message = 2;
}
 
// HelloResponse 响应内容
message HelloResponse{
  string name = 1;
  string message = 2;
}

(4) 在grpc_proto 文件夹下运行 protoc -I . --go_out=plugins=grpc:. .\hello.proto  会在此文件夹下生成一个 

hello_grpc 文件夹  hello.grpc文件夹下会有 hello.pb.go 
(5)编写客户端和服务端代码 到项目根目录下 go mod tidy 拉取依赖包
编写server.go
package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    "google.golang.org/grpc/grpclog"
    "grpc/grpc_proto/hello_grpc"
    "net"
)

// HelloServer 得有一个结构体,需要实现这个服务的全部方法,叫什么名字不重要
type HelloServer struct {
}

func (HelloServer) SayHello(ctx context.Context, request *hello_grpc.HelloRequest) (*hello_grpc.HelloResponse, error) {
    fmt.Println("入参:", request.Name, request.Message)
    return &hello_grpc.HelloResponse{
        Name:    "server",
        Message: "hello " + request.Name,
    }, nil
}

func main() {
    // 监听端口
    listen, err := net.Listen("tcp", ":8080")
    if err != nil {
        grpclog.Fatalf("Failed to listen: %v", err)
    }

    // 创建一个gRPC服务器实例。
    s := grpc.NewServer()
    server := HelloServer{}
    // 将server结构体注册为gRPC服务。
    hello_grpc.RegisterHelloServiceServer(s, &server)
    fmt.Println("grpc server running :8080")
    // 开始处理客户端请求。
    err = s.Serve(listen)
}

编写client.go

package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
    "grpc/grpc_proto/hello_grpc"
    "log"
)

func main() {
    addr := ":8080"
    // 使用 grpc.Dial 创建一个到指定地址的 gRPC 连接。
    // 此处使用不安全的证书来实现 SSL/TLS 连接
    conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        log.Fatalf(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err))
    }
    defer conn.Close()
    // 初始化客户端
    client := hello_grpc.NewHelloServiceClient(conn)
    result, err := client.SayHello(context.Background(), &hello_grpc.HelloRequest{
        Name:    "client",
        Message: "hello",
    })
    fmt.Println(result, err)
}

分别运行 go run server.go        go run client.go

 

 成功  

标签:err,grpc,server,golang,使用,go,hello
From: https://www.cnblogs.com/fly-fly-fly-fly/p/18264509

相关文章

  • VMware Workstation环境下DNS的安装配置,并使用ubuntu来测试
    需求说明:某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器,将......
  • 使用MicroBlaze的Boot Loader的注意事项
    AMD为MicroBlaze提供BootLoader,比如SRECBootLoader。它能将代码从QSPIFlash搬移到目标存储器(多半是DRAM)运行,使MicroBlaze运行大程序成为可能。如果MicroBlaze的BlockDesign设计有问题,比如BlockDesign设计中把DRAM链接到了DP(外设)端口,DRAM不能正常运行程序,也会导致BootLoade......
  • QEMU专栏 - 使用 QEMU 调试 FreeRTOS示例
    写在最前这几天一直在研究QEMU中多核ARM加载不同镜像的问题,一直不得其解,这部分后续可以分几个不分拆解下,看看为什么会出现这种问题.今天先来看看如何使用QEMU来调试FreeRTOS的示例代码.编译并运行FreeRTOS示例代码(基础版本)首先是下载代码,这种只需要看最新代......
  • repositoryItemComboBox控件的使用(转)
    DevExpress中的repositoryItemComboBox控件得到索引值和选项值有时候会在界面中使用下拉框,并且这种下拉框的属性为DevExpress.XtraEditors.Repository.RepositoryItemComboBox,这种下拉框该如何得到索引值和选项值呢?添加下拉框选项repositoryItemComboBox1.Items.Add("1");repos......
  • 中台框架模块开发实践-代码生成器的添加及使用
    前言之前已经分享过几篇关于中台项目框架的文章,相关介绍就不再赘述所谓工欲善其事必先利其器,一个项目拥有一个代码生成器是很有必要的,能够大大的节省时间,减少手误,提供开发效率(ps:特别小团队搞微服务但是没有代码生成器,简直要了老命)本文将分享如何在中台框架项目Admin.Core......
  • 【Gradio】Chatbot | 如何使用 Gradio Blocks 创建自定义聊天机器人
    简介重要提示:如果您刚开始接触,我们建议使用 gr.ChatInterface 来创建聊天机器人——它是一个高级抽象,使得可以快速创建漂亮的聊天机器人应用程序,往往只需一行代码。在这里了解更多信息。本教程将展示如何使用Gradio的低级BlocksAPI从头开始制作聊天机器人UI。这将使......
  • 在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结
    在Linux中,要使用tcpdump监听目标为主机IP为192.168.1.1,且TCP端口为80的数据包,并将输出结果保存到名为tcpdump.log的文件中,可以按照以下步骤操作:打开终端:首先,你需要在具有足够权限的用户账户下打开一个终端窗口。通常,root权限是必要的,因为普通用户可能无法监听网络接口的所有流......
  • 有效地使用DISM 不同版本的功能,并进行常见的故障排除。
    DISM(DeploymentImagingServiceandManagementTool)是一个强大的工具,用于管理和维护Windows映像。不同版本的DISM在功能和支持方面可能存在一些差异。以下我将介绍一些主要版本的DISM,以及如何进行故障排除。DISM版本差异Windows7和WindowsServer2008R2DISM在这些......
  • C#如何使用HttpClient对大文件进行断点上传和下载
    什么是Http的断点上传和下载断点上传:在向服务商上传大文件的时候,将一个大的文件拆分成多个小的文件,每个文件通过单独的Http请求上传给服务器。断点下载:在向服务器请求下载一个大的资源文件的时候,不是一次Http请求返回所有的资源文件内容。而是先通过Head请求,拿到资源文件的大小(......
  • 如何使用JMeter 中beanshell sample实现 POST 请求并处理响应
    如何使用JMeter中beanshellsample实现POST请求并处理响应在JMeter的性能测试中,可以通过Java代码来实现复杂的POST请求并处理响应。以下是一个详细的示例代码解析:importjava.io.OutputStreamWriter;importjava.io.InputStreamReader;importjava.io.BufferedReade......