本文整理汇总了Golang中github.com/kildevaeld/projects/cmd/Godeps/_workspace/src/github.com/gdamore/mangos.Socket.RecvMsg方法的典型用法代码示例。如果您正苦于以下问题:Golang Socket.RecvMsg方法的具体用法?Golang Socket.RecvMsg怎么用?Golang Socket.RecvMsg使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/kildevaeld/projects/cmd/Godeps/_workspace/src/github.com/gdamore/mangos.Socket
的用法示例。
在下文中一共展示了Socket.RecvMsg方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: replyLoop
func replyLoop(sock mangos.Socket) {
if sendData == nil {
fatalf("No data to send!")
}
for {
msg, err := sock.RecvMsg()
switch err {
case mangos.ErrRecvTimeout:
return
case nil:
default:
fatalf("RecvMsg failed: %v", err)
}
printMsg(msg)
msg.Free()
msg = mangos.NewMessage(len(sendData))
msg.Body = append(msg.Body, sendData...)
err = sock.SendMsg(msg)
if err != nil {
fatalf("SendMsg failed: %v", err)
}
}
}
示例2: recvLoop
func recvLoop(sock mangos.Socket) {
for {
msg, err := sock.RecvMsg()
switch err {
case mangos.ErrProtoState:
return
case mangos.ErrRecvTimeout:
return
case nil:
default:
fatalf("RecvMsg failed: %v", err)
}
printMsg(msg)
msg.Free()
}
}
示例3: clientWorker
func clientWorker(url string, id int) {
var sock mangos.Socket
var m *mangos.Message
var err error
if sock, err = req.NewSocket(); err != nil {
die("can't get new req socket: %s", err.Error())
}
// Leave this in Cooked mode!
sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
if err = sock.Dial(url); err != nil {
die("can't dial on req socket: %s", err.Error())
}
// send an empty messsage
m = mangos.NewMessage(1)
if err = sock.SendMsg(m); err != nil {
die("can't send request: %s", err.Error())
}
if m, err = sock.RecvMsg(); err != nil {
die("can't recv reply: %s", err.Error())
}
sock.Close()
if len(m.Body) != 4 {
die("bad response len: %d", len(m.Body))
}
worker := binary.BigEndian.Uint32(m.Body[0:])
L.Lock()
fmt.Printf("Client: %4d Server: %4d\n", id, worker)
L.Unlock()
}
示例4: serverWorker
func serverWorker(sock mangos.Socket, id int) {
var err error
delay := rand.Intn(int(time.Second))
for {
var m *mangos.Message
if m, err = sock.RecvMsg(); err != nil {
return
}
m.Body = make([]byte, 4)
time.Sleep(time.Duration(delay))
binary.BigEndian.PutUint32(m.Body[0:], uint32(id))
if err = sock.SendMsg(m); err != nil {
return
}
}
}
示例5: sendRecvLoop
func sendRecvLoop(sock mangos.Socket) {
for {
msg := mangos.NewMessage(len(sendData))
msg.Body = append(msg.Body, sendData...)
err := sock.SendMsg(msg)
if err != nil {
fatalf("SendMsg failed: %v", err)
}
if sendInterval < 0 {
recvLoop(sock)
return
}
now := time.Now()
// maximum wait time is upper bound of recvTimeout and
// sendInterval
if recvTimeout < 0 || recvTimeout > sendInterval {
sock.SetOption(mangos.OptionRecvDeadline,
time.Second*time.Duration(sendInterval))
}
msg, err = sock.RecvMsg()
switch err {
case mangos.ErrRecvTimeout:
case nil:
printMsg(msg)
msg.Free()
default:
fatalf("RecvMsg failed: %v", err)
}
time.Sleep((time.Second * time.Duration(sendInterval)) -
time.Now().Sub(now))
}
}