政府網(wǎng)站建設(shè)什么網(wǎng)站可以免費(fèi)推廣
網(wǎng)絡(luò)編程主要的內(nèi)容是:
1.TCP網(wǎng)絡(luò)編程
2.http服務(wù)
3.rpc服務(wù)
4.websocket服務(wù)
?
一、rpc
RPC 框架----- 遠(yuǎn)程過程調(diào)用協(xié)議RPC(Remote Procedure Call Protocol)-----允許像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù)。
RPC是指遠(yuǎn)程過程調(diào)用,也就是說兩臺(tái)服務(wù)器A,B,一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)
?1.1服務(wù)端,提供簡單的兩個(gè)數(shù)加法運(yùn)算
package mainimport ("fmt""net""net/http""net/rpc"
)type Server struct {
}// 一樣的請(qǐng)求和響應(yīng)結(jié)構(gòu)體
type Req struct {Num1 intNum2 int
}type Res struct {Num int
}// 計(jì)算兩個(gè)數(shù)的和
func (s Server) Add(req Req, res *Res) error {res.Num = req.Num1 + req.Num2return nil
}
func main() {//1.注冊(cè)rpc服務(wù)rpc.Register(new(Server))//2.綁定rpc.HandleHTTP()listen, err := net.Listen("tcp", ":8080")if err != nil {fmt.Println(err)return}fmt.Println("服務(wù)已經(jīng)啟動(dòng)...")http.Serve(listen, nil)
}
1.2客戶端,調(diào)用服務(wù)端的函數(shù)
package mainimport ("fmt""net/rpc"
)//與服務(wù)端一樣的請(qǐng)求和響應(yīng)結(jié)構(gòu)體type Req struct {Num1 intNum2 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 Rescleint.Call("Server.Add", req, &res)fmt.Println(res)
}
代碼結(jié)構(gòu):
?