1.rpc:本地方法調用與網絡通信技術
server:
type MathUser struct {
}
type MathRequest struct {
Min int
Mix int
}
type MathResponse struct {
Result int
}
func (m *MathUser) Add(r MathRequest, b *MathResponse) error {
b.Result = r.Min + r.Mix
fmt.Println("server_result")
return nil
}
func main() {
u := new(MathUser)
rpc.Register(u)
rpc.HandleHTTP()
listen, err := net.Listen("tcp", ":8089")
if err != nil {
panic(err)
}
go http.Serve(listen, nil)
time.Sleep(time.Duration(20) * time.Second)
}
Client
type UserReq struct {
Min int
Mix int
}
type UserRep struct {
Result int
}
func main() {
var rep UserRep
ret := UserReq{1, 2}
conn, err1 := rpc.DialHTTP("tcp", ":8089")
if err1 != nil {
panic(err1)
}
err := conn.Call("MathUser.Add", ret, &rep)
if err != nil {
panic(err)
}
fmt.Println("client_result:", rep.Result)
}
——————————————————————————
2.grpc(rpc+protobuf)
message.proto
syntax = "proto3"; package message; //訂單請求參數 message OrderRequest { string orderId = 1; int64 timeStamp = 2; } //訂單信息 message OrderInfo { string OrderId = 1; string OrderName = 2; string OrderStatus = 3; }
protoc生成message.pd.go
server
//訂單服務 type OrderService struct { } func (os *OrderService) GetOrderInfo(request message.OrderRequest, response *message.OrderInfo) error { //201907310003 orderMap := map[string]message.OrderInfo{ "201907300001": message.OrderInfo{OrderId: "201907300001", OrderName: "衣服", OrderStatus: "已付款"}, "201907310001": message.OrderInfo{OrderId: "201907310001", OrderName: "零食", OrderStatus: "已付款"}, "201907310002": message.OrderInfo{OrderId: "201907310002", OrderName: "食品", OrderStatus: "未付款"}, } fmt.Println("test") *response = message.OrderInfo{OrderId: "0", OrderName: "test", OrderStatus: "訂單信息異常"} current := time.Now().Unix() if (request.TimeStamp > current) { *response = message.OrderInfo{OrderId: "0", OrderName: "", OrderStatus: "訂單信息異常"} } else { result := orderMap[request.OrderId] //201907310003 if result.OrderId != "" { *response = orderMap[request.OrderId] } else { return nil } } return nil }
Client
client, err := rpc.DialHTTP("tcp", "localhost:8081") if err != nil { panic(err.Error()) } timeStamp := time.Now().Unix() request := message.OrderRequest{OrderId: "201907310001", TimeStamp: timeStamp} var response *message.OrderInfo err = client.Call("OrderService.GetOrderInfo", request, &response) if err != nil { panic(err.Error()) } fmt.Println(*response)