Skip to content

Commit c13000f

Browse files
committed
add
1 parent 0e47d5f commit c13000f

File tree

2 files changed

+46
-29
lines changed

2 files changed

+46
-29
lines changed

practise/grpc/client.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package main
22

33
import (
4-
"bufio"
54
"context"
65

76
"log"
8-
"os"
97
"time"
108

119
"google.golang.org/grpc"
@@ -32,6 +30,9 @@ func main() {
3230
log.Fatalf("%v", err)
3331
}
3432

33+
clientId := "node2"
34+
35+
// 启动协程,接受服务段回调 client 的请求
3536
go func() {
3637
for {
3738
msg, err := stream.Recv()
@@ -43,15 +44,17 @@ func main() {
4344
}
4445
}()
4546

46-
reader := bufio.NewReader(os.Stdin)
47-
for {
48-
text, _ := reader.ReadString('\n')
49-
if err := stream.Send(&pd.Request{
50-
Type: "server_call",
51-
Payload: []byte(text),
47+
// 启动客户端定时测试DEMO
48+
ticker := time.NewTicker(10 * time.Second)
49+
defer ticker.Stop()
50+
51+
for range ticker.C {
52+
ts := time.Now().String()
53+
if err = stream.Send(&pd.Request{
54+
Type: clientId,
55+
Payload: []byte(ts),
5256
}); err != nil {
53-
log.Fatalf("Send failed: %v", err)
57+
log.Println("调用服务端失败", err)
5458
}
55-
time.Sleep(100 * time.Millisecond)
5659
}
5760
}

practise/grpc/server.go

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"net"
88
"sync"
99

10+
"github.com/gin-gonic/gin"
1011
"google.golang.org/grpc"
1112

1213
pd "go-learning/practise/grpc/tunnel"
@@ -29,30 +30,32 @@ func (s *server) Connect(stream pd.Tunnel_ConnectServer) error {
2930
log.Printf("tream.Recv %v", err)
3031
return err
3132
}
32-
log.Printf("Received from %s: %s", req.Type, string(req.Payload))
33-
34-
switch req.Type {
35-
case "client_call":
36-
// 处理客户端主动调用
37-
fmt.Println("client_call", req)
38-
case "server_call":
39-
// 这是 Server 发起的调用,Client 应返回结果
40-
resp := &pd.Response{Result: []byte("server pong")}
41-
if err = stream.Send(resp); err != nil {
42-
return err
43-
}
33+
34+
s.lock.Lock()
35+
_, ok := s.clients[req.Type]
36+
if !ok {
37+
s.clients[req.Type] = stream
4438
}
39+
s.lock.Unlock()
40+
41+
// TODO 目前是DEMO
42+
log.Printf("Received from %s %s", req.Type, string(req.Payload))
4543
}
4644
}
45+
func (s *server) Call(c *gin.Context) {
46+
_, _ = s.CallClient(c.Query("clientId"), nil)
47+
}
4748

48-
func (s *server) CallClient(clientID string, data []byte) ([]byte, error) {
49-
stream, ok := s.clients[clientID]
49+
func (s *server) CallClient(clientId string, data []byte) ([]byte, error) {
50+
stream, ok := s.clients[clientId]
5051
if !ok {
5152
return nil, fmt.Errorf("client not connected")
5253
}
5354

5455
// 发送调用请求
55-
err := stream.Send(&pd.Response{})
56+
err := stream.Send(&pd.Response{
57+
Result: []byte(clientId + " server callback"),
58+
})
5659
if err != nil {
5760
return nil, err
5861
}
@@ -66,11 +69,22 @@ func main() {
6669
log.Fatalf("failed to listen %v", err)
6770
}
6871

72+
cs := &server{clients: make(map[string]pd.Tunnel_ConnectServer)}
73+
6974
s := grpc.NewServer()
70-
pd.RegisterTunnelServer(s, &server{})
75+
pd.RegisterTunnelServer(s, cs)
76+
77+
go func() {
78+
log.Printf("grpc listening at %v", listener.Addr())
79+
if err = s.Serve(listener); err != nil {
80+
log.Fatalf("failed to serve %v", err)
81+
}
82+
}()
7183

72-
log.Printf("listening at %v", listener.Addr())
73-
if err = s.Serve(listener); err != nil {
74-
log.Fatalf("failed to serve %v", err)
84+
r := gin.Default()
85+
r.GET("/ping", cs.Call)
86+
log.Printf("http listening at %v", ":8093")
87+
if err = r.Run(":8093"); err != nil {
88+
log.Fatalf("failed to start http: %v", err)
7589
}
7690
}

0 commit comments

Comments
 (0)