Excellent. I’ve been looking more at zenio, I think its too immature, and really I’d like to start from scratch. I definitely want to make better use of channels and goroutines. This should fit quite nicely with Go’s paradigms. I’ve been doing a lot of paper design in the past 24 hours… will start actually coding something in the next few days, and will post a git URL for collaboration when ready. -- Garrett D'Amore Sent with Airmail On February 23, 2014 at 4:28:21 AM, Ondřej Kupka (ondra.cap@xxxxxxxxx) wrote: Didn't know about zenio. I must say that having a native Go implementation of nanomsg would be pretty useful and perhaps not that hard. Cgo calls are expensive and it would also make it possible to use Go patterns instead of fighting the original interface. Speaking of zenio, not sure we need both zmq and nn. They are basically doing the same thing, so I would not waste resources doing both at once, at least at the beginning. And of course I would love to help. Unfortunately I don't have so much time. Perhaps I could review some code if it would bring some benefit. Cheers, Ondrej Kupka (tchap on GitHub) On Feb 22, 2014 8:56 PM, "Garrett D'Amore" <garrett.damore@xxxxxxxxx> wrote: Hi all, I have recently started looking at nanomsg as a superior alternative to zeromq, and I’m pleased with what I’ve found. I was able to put together a JSON-RPC server of my own device on top of nanomsg really quickly. I was quite pleased with the result. Admittedly, I’ve not tried building any of the other patterns other than REQ/REP yet, but I don’t expect too many surprises. That said, I see that the upstream github repo is rather devoid of activity lately. I’d like to understand whether this is due to lack of resource, or a feeling that the project is sufficiently complete to not require further investment? Are folks using this stuff in production yet? Are there gotchas that I should be aware of? I don’t see anything obvious in the code, but would like to know what experiences folks have with it so far. (Yes, I know its officially “alpha”, but reading the code, and understanding the underlying design, I feel *far* more inclined to trust this project’s alpha quality code than some other projects’ production stuff. :-) At the same time I’m exploring Go, and would like to bind the two together in native Go rather than building against external C. It seems that Go has a concurrency and messaging model that is more naturally suited to nanomsg, and based on conversations I’ve had with one of the Go developers (Aram Hǎvǎrneanu), I am thinking that linking libnanomsg.a to Go robs the application of some of the benefits of Go’s excellent concurrency and messaging. I did find the zenio project here https://github.com/op/zenio and am starting to work with it. I need to extend it to support the ipc:/// scheme, so that wil be my first area of enhancement. But it seems like this project really could use more investment, and its something I’m keen to do. (Has anyone else here tried using zenio outside of the author?) Admittedly I’m more interested in creating a pure Go implementation of just nanomsg than I’m in trying to also support zmq — it seems like that is better addressed in a separate project, although having a higher level abstraction model (interface) that could support either project doesn’t seem like a terrible idea — that should just be a matter of defining the proper method signatures. I’m also concerned about the stability of the wire protocol, as what I’m really looking at is investing into enhancing (if based upon zenio) or even creating (if starting fresh) a completely independent implementation of the protoocols. (Again, this has *nothing* to do with not being happy with libnanomsg in the context of a C application — in fact I really like the library both from an interface and from an implementation standpoint. But writing for C is different than writing for another environment, and I believe we can make a *superior* implementation *for Go* by doing it in Go natively.) I found the RFC drafts, and they seem to mostly match the code, apart from the fact that the current code sends version 0 instead of 1. Are there other differences in the code, or planned that I should know about? I’d also be interested in extending nanomsg to operate over kinds of transports. I’m specifically interested in tunneling it through SSL/TLS and HTTPS/websocket. (This would help allow it to reach across the internet without requiring a VPN.) It seems like this would be a fairly straight-forward task to do, just creating additional transports in the transport/ directory. Are there already such efforts underway? Are there strong opinions about such efforts one way or the other? (Doing this in Go would be almost child’s play given a version that works with TCP. Making it work in C means bringing in other libraries like OpenSSL or libcurl, unless one wants to write those protocol implementations from scratch which I most assuredly do *not*! :-) Anyway, sorry for the long rambling message, and thanks for any advice or pointers provided! -- Garrett D'Amore Sent with Airmail