一,概念

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

}

最新文章

  1. Windows 双网卡指定网络出口
  2. 在android studio 中使用applicationid的问题
  3. NFinal中增加生成页面自动带入js和css
  4. C8051 PCA实现红外遥控接收
  5. SQL Server中,Numric,Decimal,Money三种字段类型的区别
  6. codeforces Round #263(div2) D. Appleman and Tree 树形dp
  7. PCL 1.6.0 VS2010 Configuration
  8. OSPF(Open Shortest Path First开放式最短路径优先 -链路状态路由协议
  9. (原创)优酷androidclient 下载中 bug 解决
  10. iKcamp团队制作|基于Koa2搭建Node.js实战(含视频)☞ 中间件用法
  11. Python——各类库的安装(持续更新)
  12. io 的一些简单说明及使用
  13. 【转】消除代码中的 if-else/switch-case
  14. windows使用笔记-google-chrome下载地址
  15. 20145127 《Java程序设计》第四次实验报告
  16. JPEG Camer 图片上传
  17. (转)同步IO 异步IO 阻塞IO 非阻塞IO
  18. resin的几个常用配置
  19. VMware虚拟机下载与安装(内附密钥)
  20. what is feeding and what is 读扩散 and 写扩散?

热门文章

  1. Java第一篇:为什么是接口?
  2. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
  3. KingbaseES V8R3 集群专用机网关失败分析案例
  4. KingbaseES 如何实现Oracle pipelined 功能
  5. C语言的几个入门关于函数调用练习
  6. 洛谷P7112 行列式求值
  7. winfrom杀死进程及关闭进程
  8. G&GH02 储存库创建/同步
  9. 聊聊计算机之Intel CPU的MESI协议
  10. 2020-2021 Winter Petrozavodsk Camp, Belarusian SU Contest (XXI Open Cup, Grand Prix of Belarus) 题解