Files
krpc/example/main.go

52 lines
989 B
Go

package main
import (
"context"
"log"
"net"
"sync"
"krwu.top/krpc.v1"
)
func startServer(addr chan string) {
var foo Foo
if err := krpc.Register(&foo); err != nil {
log.Fatal("register error: ", err)
}
// 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()
krpc.Accept(l)
}
func main() {
log.SetFlags(0)
addr := make(chan string)
go startServer(addr)
cli, _ := krpc.Dial("tcp", <-addr)
defer func() { _ = cli.Close() }()
// send options
var wg sync.WaitGroup
// send request & receive response
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
args := &Args{Num1: i, Num2: i * i}
var reply int
if err := cli.Call(context.TODO(), "Foo.Sum", args, &reply); err != nil {
log.Fatal("call Foo.Sum error: ", err)
}
log.Printf("%d + %d = %d\n", args.Num1, args.Num2, reply)
}(i)
}
wg.Wait()
}