ErrorMsg = iota
AcceptMsg
DenyMsg
- PortMsg
+ LisnMsg
)
// when Type is ErrorMsg, Msg is set to error
// when Type is AcceptMsg, Msg is set to net.Addr
// when Type is DenyMsg, Msg is set to net.Addr
-// when Type is PortMsg, Msg is set to Listen Port(int)
+// when Type is LisnMsg, Msg is set to net.Addr
type ForwardMsg struct {
Type int
Msg interface{}
close(closec)
}
- //返回监听端口
+ //返回监听地址
select {
default:
case msg_chan <- ForwardMsg{
- Type: PortMsg,
- Msg: listener.Addr().(*net.TCPAddr).Port,
+ Type: LisnMsg,
+ Msg: listener.Addr(),
}:
}
select {
default:
case msg_chan <- ForwardMsg{
- Type: PortMsg,
- Msg: serConn.LocalAddr().(*net.UDPAddr).Port,
+ Type: LisnMsg,
+ Msg: serConn.LocalAddr(),
}:
}
}
func Call[T, E any](host, path string, it *T, ot *E) error {
- var buf bytes.Buffer
- if e := gob.NewEncoder(&buf).Encode(it); e != nil {
+ t := &Gob{}
+ if e := t.encode(it).Err; e != nil {
return errors.Join(ErrCliEncode, e)
} else {
if c, e := rpc.DialHTTPPath("tcp", host, path); e != nil {
return errors.Join(ErrDial, e)
} else {
- t := &Gob{Data: buf.Bytes()}
call := <-c.Go("DealGob.Deal", t, t, make(chan *rpc.Call, 1)).Done
if call.Error != nil {
return errors.Join(ErrCliDeal, call.Error)
if t.Err != nil {
return errors.Join(ErrSerGob, t.Err)
}
- if e := gob.NewDecoder(bytes.NewReader(t.Data)).Decode(ot); e != nil {
+ if e := t.decode(ot).Err; e != nil {
return errors.Join(ErrCliDecode, e)
}
return nil
}
func TestMain(t *testing.T) {
- pob := NewServer("127.0.0.1:10902")
+ pob := NewServer("127.0.0.1:10904")
defer pob.Shutdown()
if e := Register(pob, "/123", func(i *int, o *test1) error {
*i += 1
var i int = 9
var out test2
- if e := Call("127.0.0.1:10902", "/123", &i, &out); e != nil {
+ if e := Call("127.0.0.1:10904", "/123", &i, &out); e != nil {
t.Fatal(e)
}
}
}
+func TestMain2(t *testing.T) {
+ pob := NewServer("127.0.0.1:10903")
+ defer pob.Shutdown()
+ if e := Register(pob, "/add", func(i *int, o *int) error {
+ *o = *i + 1
+ return nil
+ }); e != nil {
+ t.Fatal(e)
+ }
+
+ var in int = 1
+ var out int
+ if e := Call("127.0.0.1:10903", "/add", &in, &out); e != nil {
+ t.Fatal(e)
+ }
+
+ if out != 2 {
+ t.FailNow()
+ }
+}
+
+func Benchmark1(b *testing.B) {
+ pob := NewServer("127.0.0.1:10903")
+ defer pob.Shutdown()
+ if e := Register(pob, "/add", func(i *int, o *int) error {
+ *o = *i + 1
+ return nil
+ }); e != nil {
+ b.Fatal(e)
+ }
+
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ var in int = 1
+ var out int
+ if e := Call("127.0.0.1:10903", "/add", &in, &out); e != nil || out != 2 {
+ b.Fatal(e)
+ }
+ }
+}
+
// func TestMain2(t *testing.T) {
// pob := NewServer("127.0.0.1:10902")