网络编程主要的内容是:
1.TCP网络编程
2.http服务
3.rpc服务
4.websocket服务
一、rpc
RPC 框架----- 远程过程调用协议RPC(Remote Procedure Call Protocol)-----允许像调用本地服务一样调用远程服务。
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
1.1服务端,提供简单的两个数加法运算
package main
import (
"fmt"
"net"
"net/http"
"net/rpc"
)
type Server struct {
}
// 一样的请求和响应结构体
type Req struct {
Num1 int
Num2 int
}
type Res struct {
Num int
}
// 计算两个数的和
func (s Server) Add(req Req, res *Res) error {
res.Num = req.Num1 + req.Num2
return nil
}
func main() {
//1.注册rpc服务
rpc.Register(new(Server))
//2.绑定
rpc.HandleHTTP()
listen, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("服务已经启动...")
http.Serve(listen, nil)
}
1.2客户端,调用服务端的函数
package main
import (
"fmt"
"net/rpc"
)
//与服务端一样的请求和响应结构体
type Req struct {
Num1 int
Num2 int
}
type Res struct {
Num int
}
func main() {
cleint, err := rpc.DialHTTP("tcp", ":8080")
if err != nil {
fmt.Println(err)
return
}
req := Req{1, 2}
var res Res
cleint.Call("Server.Add", req, &res)
fmt.Println(res)
}
代码结构: