一、grpc安装

将 https://github.com/google/go-genproto 修改文件名放到 $GOPATH/src/google.golang.org/genproto
将 https://github.com/grpc/grpc-go 修改文件名放到 $GOPATH/src/google.golang.org/grpc
将 https://github.com/golang/text 放到 $GOPATH/src/golang.org/x/text
将 https://github.com/golang/net 放到 $GOPATH/src/golang.org/x/net 然后
cd $GOPATH/src/
go install google.golang.org/grpc

PS:protobuf的安装不做介绍。

二、grpc的helloworld示例

服务端:

package main

import (
"context"
"log"
"net" "google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
) const (
PORT = ":8080"
) type server struct{} // SayHello实现了helloworld.pb.go中的GreeterServer接口
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
log.Printf("Received: %v", in.Name)
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
} func main() {
// 监听
lis, err := net.Listen("tcp", PORT)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// new服务对象
s := grpc.NewServer()
// 注册服务
pb.RegisterGreeterServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}

客户端:

package main

import (
"context"
"log"
"time" "google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
) const (
ADDR = "localhost:8080"
NAME = "World"
) func main() {
// 建立与服务器的连接
conn, err := grpc.Dial(ADDR, grpc.WithInsecure())
if err != nil {
log.Fatalf("连接失败: %v", err)
}
defer conn.Close() // 调用proto的函数创建客户端连接句柄
c := pb.NewGreeterClient(conn) ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel() // 调用proto的SayHello函数
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: NAME})
if err != nil {
log.Fatalf("调用SayHello失败: %v", err)
}
log.Println(r.Message)
}

最新文章

  1. 从零开始学Python04作业思路:模拟ATM电子银行
  2. linux常用命令:4文件压缩和解压命令
  3. 如何更新Android SDK和Build Tool
  4. 30天轻松学习javaweb_通过telnet连接http服务器
  5. NovaMind *的安装、和谐破解到永久使用
  6. 编写自己的单点登录(SSO)服务
  7. centos7图形配置 firewall-config
  8. 201521123121 《Java程序设计》第1周学习总结
  9. ccd采集
  10. 项目Alpha冲刺Day12
  11. Scrum冲刺阶段3
  12. Python中csv模块解析
  13. echarts画饼环状饼图相关参数配置
  14. Flink – Stream Task执行过程
  15. 解决MySQL忘记root密码
  16. jquery 获取URL参数并转码的例子
  17. Windows 下使用 GCC
  18. Codeforces Round #528 Solution
  19. python学习笔记(10)--爬虫下载煎蛋图片
  20. 2018DDCTF Misc部分WP

热门文章

  1. Markdown显示测试
  2. Raid0,1,5,10,50
  3. Git文件合并
  4. python爬虫常用headers设置
  5. 如何单页面不引用移动端的适配 (postcss)
  6. vue同时安装element ui跟 vant
  7. Python打印到屏幕_读取键盘输入
  8. PHP array_search() 函数
  9. luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树
  10. 【好文推荐】黑莓OS手册是如何详细阐述底层的进程和线程模型的?