mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
49 lines
971 B
Go
49 lines
971 B
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"geerpc"
|
|
"geerpc/codec"
|
|
"log"
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
func startServer(addr chan string) {
|
|
// pick a free port
|
|
l, err := net.Listen("tcp", ":0")
|
|
if err != nil {
|
|
log.Fatal("network error:", err)
|
|
}
|
|
log.Println("start rpc server on", l.Addr())
|
|
addr <- l.Addr().String()
|
|
geerpc.Accept(l)
|
|
}
|
|
|
|
func main() {
|
|
addr := make(chan string)
|
|
go startServer(addr)
|
|
|
|
// in fact, following code is like a simple geerpc client
|
|
conn, _ := net.Dial("tcp", <-addr)
|
|
defer func() { _ = conn.Close() }()
|
|
|
|
time.Sleep(time.Second)
|
|
// send options
|
|
_ = json.NewEncoder(conn).Encode(geerpc.DefaultOption)
|
|
cc := codec.NewGobCodec(conn)
|
|
// send request & receive response
|
|
for i := 0; i < 5; i++ {
|
|
h := &codec.Header{
|
|
ServiceMethod: "Foo.Sum",
|
|
Seq: uint64(i),
|
|
}
|
|
_ = cc.Write(h, fmt.Sprintf("geerpc req %d", h.Seq))
|
|
_ = cc.ReadHeader(h)
|
|
var reply string
|
|
_ = cc.ReadBody(&reply)
|
|
log.Println("reply:", reply)
|
|
}
|
|
}
|