Grpc

实现流程图

资料

使用方法

make run

新建一个proto文件

syntax = "proto3";

package chat;

service ChatService {
//发送消息
rpc Send(SendRequest) returns (SendReply){};
}
//发送消息 请求结构体
message SendRequest {
string content = 1;//发送内容
}
//发送消息 响应结构体
message SendReply {
string msg = 1;//返回消息
}

GRPC服务端

package main

import (
"context"
"github.com/yezihack/grpc/simple/server/proto"
"google.golang.org/grpc"
"log"
"net"
"os"
) var (
port = ":8008"
) func main() {
log.SetOutput(os.Stdout)
//新建一个tcp监听
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalln(err)
}
//起一个服务
s := grpc.NewServer()
// 注册反射服务 这个服务是CLI使用的 跟服务本身没有关系
chat.RegisterChatServiceServer(s, &Chats{})
log.Printf("server port %s start...\n", port)
//启动服务
if err = s.Serve(lis); err != nil {
log.Fatalln(err)
}
} //新建一个结构体,实现proto里定义的方法
type Chats struct {
} //实现proto方法
func (c *Chats) Send(ctx context.Context, in *chat.SendRequest) (*chat.SendReply, error) {
out := chat.SendReply{
Msg: "hello " + in.Content,
}
return &out, nil
}

客户端代码

package main

import (
"context"
"github.com/yezihack/grpc/simple/server/proto"
"google.golang.org/grpc"
"log"
"os"
) var (
addrees = "localhost:8008"
) func main() {
log.SetOutput(os.Stdout)
conn, err := grpc.Dial(addrees, grpc.WithInsecure())
if err != nil {
log.Fatalln(err)
}
client := chat.NewChatServiceClient(conn)
req := chat.SendRequest{
Content: "world 2019",
}
reply, err := client.Send(context.Background(), &req)
if err != nil {
log.Fatalln(err)
}
log.Println(reply.Msg) }

代码归档: https://github.com/yezihack/grpc

学习GRPC(一) 简单实现的更多相关文章

  1. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  2. Hibernate二次学习一----------Hibernate简单搭建

    因为博客园自带的markdown不太好用,因此所有markdown笔记都使用cmd_markdown发布 Hibernate二次学习一----------Hibernate简单搭建: https:// ...

  3. JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  4. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  5. gRPC的简单使用

    目录 前言 gRPC的简单介绍 基本用法 服务的定义 服务端代码编写 客户端代码编写 运行效果 服务治理(注册与发现) .NET Core 2.x 和 .NET Core 3.0的细微区别 扩展阅读 ...

  6. Spark学习笔记0——简单了解和技术架构

    目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...

  7. Html学习笔记(二) 简单标签

    标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...

  8. Openfire/XMPP学习之——一个简单的Smack样例

    昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...

  9. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

随机推荐

  1. 有关js的一些小问题

    忘了从哪里找来抄下来的: js执行顺序问题 1.函数的声明和调用 “定义式”函数声明 function fn1() {......} "赋值式"函数声明 var f=functio ...

  2. laravel5.2总结--邮件

    laravel自带SwiftMailer库,集成了多种邮件API,支持多种邮件驱动方式,包括smtp.Mailgun.Maildrill.Amazon SES.mail和sendmail,Mailgu ...

  3. 我给女朋友讲编程CSS系列(2)- CSS语法、3大选择器、选择器优先级

    首先看一下使用Css设置h1标签字体颜色和大小的例子,效果图如下: 新建一个网页test.html,然后复制粘贴下面的内容: <html> <head> <style t ...

  4. 嵌入式tcpip

    嵌入式tcpip方案 目前高端一点的嵌入式处理器,如STM32F107,都带有MAC,因此用户在实现网络功能的时候,只需要外界PHY层的芯片, 目前使用比较都的是DM9161A.网上的驱动也比较多,开 ...

  5. Leetcode 557.反转字符串中的单词III

    反转字符串中的单词III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest ...

  6. java第五次课堂笔记

  7. 设计模式 uml元素

    uml的构造包含3种 事物4种:结构,行为,分组,注释事物 关系4种:泛化,实现,依赖,关联, 图10种,用例图,类图,对象,包,组件,部署,状态,活动,序列,协作 事物是对模型中最具代表性的成分的抽 ...

  8. re.search 与 re.match的区别

    search ⇒ find something anywhere in the string and return a match object. match ⇒ find something at ...

  9. MyEclipse生成get/set注释

    我的外网链接 http://yezi-0016.iteye.com/blog/2290421

  10. Prime Gift(prime)

    Prime Gift(prime) 题目描述 Jyt有nn个质数,分别为p1,p2,p3-,pnp1,p2,p3-,pn. 她认为一个数xx是优秀的,当且仅当xx的所有质因子都在这nn个质数中. 她想 ...