单服务例子
最后更新于:2022-04-02 02:49:56
[TOC]
## 实例
server.go
```
package main
import (
"context"
"flag"
"fmt"
"github.com/smallnest/rpcx/server"
)
var (
addr = flag.String("addr", "localhost:8973", "server address")
)
type Args struct {
A int
B int
}
type Reply struct {
C int
}
type Arith struct{}
// the second parameter is not a pointer
func (t *Arith) Mul(ctx context.Context, args Args, reply *Reply) error {
reply.C = args.A * args.B
fmt.Println("C=", reply.C)
return nil
}
func main() {
flag.Parse()
s := server.NewServer()
//s.Register(new(Arith), "")
s.RegisterName("Arith", new(Arith), "")
err := s.Serve("tcp", *addr)
if err != nil {
panic(err)
}
}
```
client.go
```
package main
import (
"context"
"flag"
"log"
"github.com/smallnest/rpcx/protocol"
"github.com/smallnest/rpcx/client"
)
var (
addr = flag.String("addr", "localhost:8973", "server address")
)
func main() {
type Args struct {
A int
B int
}
type Reply struct {
C int
}
flag.Parse()
d := client.NewPeer2PeerDiscovery("tcp@"+*addr, "")
opt := client.DefaultOption
opt.SerializeType = protocol.JSON
xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, opt)
defer xclient.Close()
args := Args{
A: 10,
B: 20,
}
reply := &Reply{}
err := xclient.Call(context.Background(), "Mul", args, reply)
if err != nil {
log.Fatalf("failed to call: %v", err)
}
log.Printf("%d * %d = %d", args.A, args.B, reply.C)
}
```
';