一,概念

RPC:Remote procedure call(远程过程调用),分布式系统中不同节点之间流行的通信方式

服务端:

注:

1、执行下面的代码之后,会相应的启动一个tcp进程

C:\Users\lWX1011939>netstat -aon|findstr 1234           1234是代码中指定的端口号

TCP    127.0.0.1:1234         0.0.0.0:0              LISTENING       10960

2、终止进程:C:\Users\lWX1011939>taskkill /F  /pid 10960      /F:表示强制终止

成功: 已终止 PID 为 10960 的进程。

package main

import (

"log"

"net"

"net/rpc"

)

type HelloService struct {

//构造一个HelloService类型

}

//一个满足rpc规则的方法(方法只能有两个可序列化的参数,第二个参数是指针类型,方法返回error类型)

func (p *HelloService) Hello(request string, reply *string) error {

*reply = "hello " + request

return nil

}

func main() {

//rpc.RegisterName会将传入的对象类型中所有满足RPC规则的方法注册为RPC函,比如这里的Hello函数

rpc.RegisterName("HelloService", new(HelloService))

//建立唯一的tcp链接

listener, listenErrInfo := net.Listen("tcp", "localhost:1234")

if listenErrInfo != nil {

log.Fatal("Listen tcp error by: ", listenErrInfo)

}

connector, acceptErrInfo := listener.Accept()

if acceptErrInfo != nil {

log.Fatal("Accept error : ", acceptErrInfo)

}

//通过rpc.ServeConn函数在该TCP链接上为对方提供RPC服务

rpc.ServeConn(connector)

}

客户端:

package main

import (

"fmt"

"log"

"net/rpc"

)

func main() {

//客户端请求HelloService服务。首先通过rpc.Dial拨号RPC服务

client, dialErrInfo := rpc.Dial("tcp", "localhost:1234")

if dialErrInfo != nil {

log.Fatal("Dial error: ", dialErrInfo)

}

var reply string

//通过client.Call调用具体的RPC方法, 第一个参数是用点号链接的RPC服务名字和方法名字,第二和第三个参数分别我们定义RPC方法的两个参数

callErrInfo := client.Call("HelloService.Hello", "hello", &reply)

if callErrInfo != nil {

log.Fatal("Call error info: ", callErrInfo)

}

fmt.Println("reply: ", reply)           这里会打印出reply:  hello hello

}

【RPC和Protobuf】之RPC入门的更多相关文章

  1. python通过protobuf实现rpc

    由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...

  2. 基于HTTP/2和protobuf的RPC框架:GRPC

    谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC Google 刚刚开源了grpc,  一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobu ...

  3. JAVA RPC(一)RPC入门

    为什么要写这个RPC 市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架就想spring一样,虽然号称是轻量级,但是用起来却 ...

  4. Java自带RPC实现,RMI框架入门

    Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...

  5. 十七.protobuf在rpc中的使用

    关于protobuf在rpc中的使用,设计到gRPC,相关内容待续....

  6. RPC框架实现(一) Protobuf的rpc实现

    概述 RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便.常见的RPC框架配带的功能有: 编解码协议.比如protobuf.thrift等等. 服务发现.指 ...

  7. 应答流式RPC 请求流式RPC 向流式RPC 流式RPC的三种具体形式

    https://mp.weixin.qq.com/s/pWwSfXl71GQZ3KPmAHE_dA 用Python进行gRPC接口测试(二) 大帆船 搜狗测试 2020-02-07   上期回顾:用P ...

  8. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化

    序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...

  9. Solon rpc 之 SocketD 协议 - RPC调用模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  10. Solon rpc 之 SocketD 协议 - RPC鉴权模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

随机推荐

  1. Kingbase V8R6集群安装部署案例---脚本在线一键缩容

    ​ 案例说明: KingbaseES V8R6支持图形化方式在线缩容,但是在一些生产环境,在服务器不支持图形化界面的情况下 ,只能通过脚本命令行的方式执行集群的部署或在线缩容. Tips: Kingb ...

  2. KingbaseFlySync ddl变更流程

    关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java 一.ddl变更流程 1. 停掉客户业务,保证没有新数据产生 确认Oracle数据库上所有 ...

  3. PostgreSQL 时间函数分类与特性

    KingbaseES 时间函数有两大类:返回事务开始时间和返回语句执行时的时间.具体函数看以下例子: 1.返回事务开始时的时间 以下函数返回事务开始的时间(通过 begin .. end 两次调用结果 ...

  4. [python]-random模块-手动随机数

    random模块通常用来生成随机数,结合time模块生成随机数的代码: import time import random random.seed(time.time()) x = random.ra ...

  5. 使用PBIS将Linux加入域

     使用PBIS将Linux加入域 很多企业已经部署的微软的活动目录,为了方便管理,可以把Linux加入域.网上流传了很多把Linux加入域的方法,感觉比较复杂,并且似乎并没有真正的加入域.只是完成 ...

  6. 如何使用DBeaver连接Hive

    1 DBeaver介绍 DBeaver是一个通用的数据库管理工具和 SQL 客户端,支持多种兼容 JDBC 的数据库.DBeaver 提供一个图形界面用来查看数据库结构.执行SQL查询和脚本,浏览和导 ...

  7. ProxySQL的双层用户认证机制

    转载自:https://www.likecs.com/show-203802325.html 如果使用了ProxySQL来做中间路由,那么与我们平时登录数据库有一些区别:平时我们直接使用数据库的用户密 ...

  8. 创建一个 autocomplete 输入系统 - 前端 + 后端

    文章转载自:https://mp.weixin.qq.com/s/uqchdrkhdFsof0ZFtECujg 我们经常在网站搜索输入时,会帮我们提醒自动完成的功能,比如: 图片 当我们在百度上搜索 ...

  9. 2.第一篇 k8s组件版本及功能简介

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483772&idx=1&sn=a693d8a9 ...

  10. Logstash:如何使用Elasticsearch,Logstash和Kibana管理Apache日志