Created
March 29, 2016 01:13
-
-
Save OneOfOne/ac141c675b7942186769 to your computer and use it in GitHub Desktop.
mangos bug dropping messages
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "log" | |
| "strconv" | |
| "time" | |
| "github.com/go-mangos/mangos" | |
| "github.com/go-mangos/mangos/protocol/pub" | |
| "github.com/go-mangos/mangos/protocol/sub" | |
| "github.com/go-mangos/mangos/transport/ipc" | |
| "github.com/go-mangos/mangos/transport/tcp" | |
| ) | |
| func server(url string) { | |
| var sock mangos.Socket | |
| var err error | |
| if sock, err = pub.NewSocket(); err != nil { | |
| log.Fatalf("can't get new pub socket: %s", err) | |
| } | |
| sock.AddTransport(ipc.NewTransport()) | |
| sock.AddTransport(tcp.NewTransport()) | |
| if err = sock.Listen(url); err != nil { | |
| log.Fatalf("can't listen on pub socket: %s", err.Error()) | |
| } | |
| for i := uint64(0); ; i++ { | |
| if err = sock.Send([]byte(strconv.FormatUint(i, 10))); err != nil { | |
| log.Fatalf("Failed publishing: %s", err.Error()) | |
| } | |
| } | |
| } | |
| func client(url string) { | |
| var sock mangos.Socket | |
| var err error | |
| var msg []byte | |
| if sock, err = sub.NewSocket(); err != nil { | |
| log.Fatalf("can't get new sub socket: %s", err.Error()) | |
| } | |
| sock.AddTransport(ipc.NewTransport()) | |
| sock.AddTransport(tcp.NewTransport()) | |
| if err = sock.Dial(url); err != nil { | |
| log.Fatalf("can't dial on sub socket: %s", err.Error()) | |
| } | |
| err = sock.SetOption(mangos.OptionSubscribe, []byte("")) | |
| if err != nil { | |
| log.Fatalf("cannot subscribe: %s", err.Error()) | |
| } | |
| for i := uint64(0); ; i++ { | |
| if msg, err = sock.Recv(); err != nil { | |
| log.Fatalf("Cannot recv: %s", err.Error()) | |
| } | |
| v, _ := strconv.ParseUint(string(msg), 10, 64) | |
| if v != i { | |
| //log.Printf("missed %d, got %d", i, v) | |
| } | |
| if i%1e6 == 0 { | |
| log.Println(i, v) | |
| } | |
| } | |
| } | |
| func main() { | |
| log.SetFlags(log.Lshortfile) | |
| const addr = "tcp://127.0.0.1:40899" | |
| go server(addr) | |
| time.Sleep(time.Second * 2) | |
| client(addr) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment