RPC 是什么

RPC(Remote Procedure Call) 是一个计算机通信协议。该协议允许运行与一台计算机的程序调用另一个地址空间的程序,是一个通过发送请求-接受回应进行信息交互的系统。

RPC 的规则

RPC 方法需要为公有,同时有两个可序列化参数,第二个为引用类型(response 调用方接受服务方修改的值)函数返回类型为error。

eg: func Method(request string,response *string)error{

}

Echo demo

server

package main

import (
"fmt"
"net"
"net/rpc"
) type EchoService struct {
} func (p *EchoService) Echo(message string, reply *string) error {
fmt.Println("client say:", message)
*reply = "echo server say :" + message
return nil
} func main() {
fmt.Println("waitting or client..")
rpc.RegisterName("EchoService", new(EchoService))
listener, err := net.Listen("tcp", ":8888")
if err != nil {
panic(err)
}
conn, err := listener.Accept()
if err != nil {
panic(err)
}
rpc.ServeConn(conn)
}

client

package main

import (
"fmt"
"net/rpc"
) func main() {
client, err := rpc.Dial("tcp", "localhost:8888")
if err != nil {
panic(err)
} var reply string
err = client.Call("EchoService.Echo", "Hello world", &reply)
if err != nil {
panic(err)
}
client.Close()
fmt.Println(reply)
}

结果:

~/.../rpc/server >>> go run ./echo.go
waitting or client..
client say: Hello world ~/.../rpc/client >>> go run ./client.go
echo server say :Hello world

RPC协议实践入门的更多相关文章

  1. WCF宿主实践入门

    本篇属于WCF实践入门,由于博主本人水平有限,没有理论上的介绍,仅仅从其几种不同的宿主方式分别介绍WCF的使用. WCF有多种宿主方式:1.自托管宿主,2.windows service宿主,3.II ...

  2. RPC与实践(thrift在windows的编译/安装--c++版)

    ------------------------------------------------------------------------ RPC 功能目标 RPC 的主要功能目标是让构建分布式 ...

  3. 【无线安全实践入门】网络扫描和ARP欺骗

    文中可能存在错误操作或错误理解,望大家不吝指正. 同时也希望可以帮助到想要学习接触此方面.或兴趣使然的你,让你有个大概的印象. !阅前须知! 本文是基于我几年前的一本笔记本,上面记录了我学习网络基础时 ...

  4. 游戏编程系列[1]--游戏编程中RPC协议的使用

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...

  5. 微博RPC框架motan入门笔记

    Motan 是一套高性能.易于使用的分布式远程服务调用(RPC)框架. 功能 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力. 支持集成consul.zookeeper ...

  6. 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100

    出现这个问题的背景是,判断一批激活码在系统中是否已经存在,很傻的一个作法是,把这一批激活码,以in(in (‘ddd‘,‘aaa‘))的形式来处理,导致问题的出现. 后来,查找资料,http://bb ...

  7. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  8. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

  9. Hessian 二进制RPC协议框架

    Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议. 和其他Web服务的实现框架不同的是,Hessian是一个使用二进制轻量级的Web服务协议的框架,免除了许多附加的 ...

随机推荐

  1. 16.Android-activity生命周期与启动模式

    1.activity共有4个状态 如下图所示: 运行状态 如果一个活动位于屏幕的前台(可见的),那么它就是活动的或正在运行的. 暂停状态 如果一个活动失去了焦点,但仍然可见(也就是说,一个新的非全尺寸 ...

  2. 这里有40条提升编程技能小妙招!还有TIOBE 7月份的编程语言排行榜

    如何提高编程技能?恐怕很多开发者思考过这个问题.最近,拥有将近 15 年开发经验的软件工程师 Kesk -*- 写了一篇博客,列举了 40 条对其职业生涯有所帮助的事项.   或许,通过以下 40 个 ...

  3. mac 解决安卓模拟器链接不上网络

    方法1.临时方法,每次启动都要加114.114.114.114 1.进入到下面的目录 /Users/anxiaodong/Library/Android/sdk/emulator 2.执行以下命令 e ...

  4. CPU 底层运算之乘法运算

    CPU 运算加减法运算 假设计算  3+3  原码是0011 * 0011(以4位存贮单元,因为是原码,最高位不代表符号位) 1. 首先 判断 两个加数是否有 负数(减法)  如果有 负数 先将负数转 ...

  5. python3配置socks5代理进行爬取

    一.代码 #!/usr/bin/python # -*- coding: UTF-8 -*- import requests import socket import socks SOCKS5_PRO ...

  6. 010_Java历史及特性

    目录 Java历史 C语言 1972年 C++ 1982年 Java 1995年 Applet 图形界面的程序 J2SE Java 2 标准版 桌面 J2ME Java 2 移动版 手机 J2EE J ...

  7. DataSkew 数据倾斜

    date: 2020-04-21 19:38:00 updated: 2020-04-24 10:26:00 DataSkew 数据倾斜 1. Hive 里的数据倾斜 1.1 null值 空值 尽量提 ...

  8. vue-cli 工程目录结构介绍 详细介绍

    vue-cli目录结构: vue-cli目录解析: build 文件夹:用于存放 webpack 相关配置和脚本.开发中仅 偶尔使用 到此文件夹下 webpack.base.conf.js 用于配置 ...

  9. 随便聊一聊&最近做的项目

    好久没有发文章了,我并非闲着,而是把原来发博文的形式转成了写稿. 今年是非常特殊的一年,长这么大,从来没有休过如此漫长的寒假,也从未在家进行过一个月以上的远程办公,新冠肺炎对各行各业都产生了巨大影响, ...

  10. js-循环遍历

    for循环 (最传统的方法) let arr=[a,b,c,d] for (var i = 0; i < arr.length; i++) { console.log(arr[i]); } fo ...