Skip to content

Commit f651ae4

Browse files
committed
support recv timeout
1 parent 3f8ad55 commit f651ae4

File tree

2 files changed

+33
-23
lines changed

2 files changed

+33
-23
lines changed

client/client.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"io"
1111
"log"
1212
"net"
13+
"time"
1314
)
1415

1516
type Client struct {
@@ -92,27 +93,31 @@ func (c *Client) SendRequest(path string, r json.Marshaler) (uint32, error) {
9293

9394
func (c *Client) Recv(id uint32, ret interface{}) exception.ExceptionInterface {
9495
// TODO: 增加超时
95-
bt, ok := <-c.ChannelManager.Get(id, false)
96-
if !ok {
97-
return exception.NewDefaultException("recv failed")
98-
}
96+
select {
97+
case bt, ok := <-c.ChannelManager.Get(id, false):
98+
if !ok {
99+
return exception.NewDefaultException("recv failed")
100+
}
99101

100-
req := &formatter.JsonRPCErrorResponse[any]{}
101-
err := json.Unmarshal(bt, req)
102-
if err != nil {
103-
return exception.NewDefaultException(err.Error())
104-
}
102+
req := &formatter.JsonRPCErrorResponse[any]{}
103+
err := json.Unmarshal(bt, req)
104+
if err != nil {
105+
return exception.NewDefaultException(err.Error())
106+
}
105107

106-
if req.Error != nil {
107-
return &exception.Exception{Code: req.Error.Code, Message: req.Error.Message}
108-
}
108+
if req.Error != nil {
109+
return &exception.Exception{Code: req.Error.Code, Message: req.Error.Message}
110+
}
109111

110-
err = json.Unmarshal(bt, ret)
111-
if err != nil {
112-
return exception.NewDefaultException(err.Error())
113-
}
112+
err = json.Unmarshal(bt, ret)
113+
if err != nil {
114+
return exception.NewDefaultException(err.Error())
115+
}
114116

115-
return nil
117+
return nil
118+
case <-time.After(3 * time.Second):
119+
return exception.NewDefaultException("recv timeout")
120+
}
116121
}
117122

118123
func (c *Client) FreshSocket() error {

examples/client/main.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
cli "github.com/hyperf/roc/client"
66
"github.com/hyperf/roc/formatter"
7+
"time"
78
)
89

910
type FooSaveInput struct {
@@ -56,12 +57,16 @@ func main() {
5657

5758
fmt.Println(ret.Result.IsSuccess)
5859

59-
req = FooSaveRequest{ID: 1, Input: &FooSaveInput{Name: "error", Gender: 1}}
60-
id, _ = client.SendRequest("/foo/save", &req)
60+
for {
61+
req = FooSaveRequest{ID: 1, Input: &FooSaveInput{Name: "error", Gender: 1}}
62+
id, _ = client.SendRequest("/foo/save", &req)
6163

62-
ret = &formatter.JsonRPCResponse[FooSaveResult, any]{}
63-
err = client.Recv(id, ret)
64-
if err != nil {
65-
fmt.Println(err)
64+
ret = &formatter.JsonRPCResponse[FooSaveResult, any]{}
65+
err = client.Recv(id, ret)
66+
if err != nil {
67+
fmt.Println(err)
68+
}
69+
70+
time.Sleep(time.Second)
6671
}
6772
}

0 commit comments

Comments
 (0)