一,概念

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. rh358 005 dhcp dhcp6 打印机 ansible配置dhcp和打印机

    部署dhcp服务器 主机发送Discover报文 目标为广播地址 同一网段的dhcp收到报文后,dhcp响应一个offer报文 offer报文:dhcp自己的ip地址.和客户端ip以及使用周期,和客户 ...

  2. 这里聊聊扫地机的 IOT 开发

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16663833.html 消费者使用扫地机通常的方式是通过 ...

  3. 跟羽夏学 Ghidra ——初识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  4. mysql8 安装与配置文件添加时区

    mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...

  5. 使用Logstash把MySQL数据导入到Elasticsearch中

    总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https ...

  6. 使用 Loki 搭建个人日志平台

    文章转载自:https://blog.kelu.org/tech/2020/01/31/grafana-loki-for-logging-aggregation.html 背景 Loki的第一个稳定版 ...

  7. react.js+easyui 做一个简单的商品表

    效果图:     import React from 'react'; import { Form, FormField, Layout,DataList,LayoutPanel,Panel, Lab ...

  8. Vue3 SFC 和 TSX 方式调用子组件中的函数

    在开发中会遇到这样的需求:获取子组件的引用,并调用子组件中定义的方法.如封装了一个表单组件,在父组件中需要调用这个表单组件的引用,并调用这个表单组件的校验表单函数或重置表单函数.要实现这个功能,首先要 ...

  9. Linux实战笔记_CentOS7_无法识别NTFS格式的U盘

    注:因为CentOS 默认不识别NTFS的磁盘格式,所以我们要借助另外一个软件ntfs-3g来挂载.自带的yum源没有这个软件,要用第三方的软件源,比如阿里的epel. #安装ntfs-3g cd / ...

  10. Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)

    在以下文章的基础上 1.深入理解Vuex.原理详解.实战应用:https://blog.csdn.net/weixin_43304253/article/details/126651368 2.深入理 ...