服务端代码:
package main
import (
"net/rpc"
"net"
"log"
)
//自己的数据类
type MyMath struct{
}
//加法--只能两个参数
func (mm *MyMath) Add(num map[string]int,reply *int) error {
*reply = num["num1"] + num["num2"]
return nil
}
//减法--只能两个参数
func (mm *MyMath) Sub(num map[string]int,reply *int) error {
*reply = num["num1"] - num["num2"]
return nil
}
func main() {
//注册MyMath类,以代客户端调用
rpc.Register(new(MyMath))
listener, err := net.Listen("tcp", ":1215")
if err != nil {
log.Fatal("listen error:", err)
}
for {
conn, err := listener.Accept()
if err != nil {
continue
}
//新协程来处理
go rpc.ServeConn(conn)
}
}
客户端代码:
package main
import (
"net/rpc"
"net"
"log"
)
//自己的数据类
type MyMath struct{
}
//加法--只能两个参数
func (mm *MyMath) Add(num map[string]int,reply *int) error {
*reply = num["num1"] + num["num2"]
return nil
}
//减法--只能两个参数
func (mm *MyMath) Sub(num map[string]int,reply *int) error {
*reply = num["num1"] - num["num2"]
return nil
}
func main() {
//注册MyMath类,以代客户端调用
rpc.Register(new(MyMath))
listener, err := net.Listen("tcp", ":1215")
if err != nil {
log.Fatal("listen error:", err)
}
for {
conn, err := listener.Accept()
if err != nil {
continue
}
//新协程来处理
go rpc.ServeConn(conn)
}
}
对比之现http协议的区别,服务端采用了TCP协议,然后需要自己控制连接,当有客户端连接上来后,我们需要把这个连接交给rpc来处理,而客户端唯一的区别一个是DialHTTP,一个是Dial(tcp),其他处理一模一样.