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)
2883

被折叠的 条评论
为什么被折叠?



