feat: implement server and client

This commit is contained in:
2022-04-23 01:24:17 +08:00
parent cf8fa335a6
commit 74ef998a9b
13 changed files with 631 additions and 120 deletions

51
example/main.go Normal file
View File

@ -0,0 +1,51 @@
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()
}

12
example/service.go Normal file
View File

@ -0,0 +1,12 @@
package main
type Foo int
type Args struct {
Num1, Num2 int
}
func (f Foo) Sum(args Args, reply *int) error {
*reply = args.Num1 + args.Num2
return nil
}