-
Notifications
You must be signed in to change notification settings - Fork 0
/
reqrep.go
79 lines (60 loc) · 2.01 KB
/
reqrep.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"fmt"
"bitbucket.org/gdamore/mangos"
"bitbucket.org/gdamore/mangos/protocol/req"
"bitbucket.org/gdamore/mangos/protocol/rep"
"bitbucket.org/gdamore/mangos/transport/all"
)
func main() {
url := "tcp://127.0.0.1:8000"
// 1. Create Response Server
responseServerReady := make(chan struct{})
responseServer, err := rep.NewSocket()
defer responseServer.Close()
all.AddTransports(responseServer)
// 2. Run Response Server
go func() {
var err error
var serverMsg *mangos.Message
if err = responseServer.Listen(url); err != nil {
fmt.Printf("\nServer listen failed: %v", err)
return
}
close(responseServerReady)
for {
if serverMsg, err = responseServer.RecvMsg(); err != nil {
fmt.Printf("\nServer receive failed: %v", err)
}
fmt.Println("serverMsg: %v", serverMsg.Body)
serverMsg.Body = append(serverMsg.Body, []byte(" World!")...)
fmt.Println("new serverMsg: %v", serverMsg.Body)
if err = responseServer.SendMsg(serverMsg); err != nil {
fmt.Printf("\nServer send failed: %v", err)
return
}
}
}()
// 3. Create Request Client
requestSocket, err := req.NewSocket()
defer requestSocket.Close()
all.AddTransports(requestSocket)
// 4. Client dials Server
if err = requestSocket.Dial(url); err != nil {
fmt.Printf("\nClient dial failed: %v", err)
return
}
<-responseServerReady
// 5. Client sends message
clientMessageBytes := []byte("Hello!")
if err = requestSocket.Send(clientMessageBytes); err != nil {
fmt.Printf("\nClient send failed: %v", err)
return
}
var clientMsg []byte
if clientMsg, err = requestSocket.Recv(); err != nil {
fmt.Printf("\nClient receive failed: %v", err)
return
}
fmt.Printf("\nClient receive message: %s\n", clientMsg)
}