| The only points of yours I agree with are the claims of 'price tag of zero' and 'mind-blowing performance'. The rest seem to be apples/oranges comparisons and being intentionally obtuse, e.g. as to what 'portable' and 'community' mean. > Sockets are just as portable [...] almost every single language and runtime (Python, Ruby, Java, OCaml ...) provides a portable socket API. It's not portability if you have to learn APIs at varying levels of abstraction for each language you need to port to. > Length-prefixed message framing winds up being 10-100 lines of code in almost any language/environment. That is work to do in every single language you wish to work in. You are acknowledging the value that ZeroMQ provides in not requiring you to carry out this work. >> support for every bloody language anyone cares about > Just like sockets. Except with the aforementioned portability (APIs at a consistent level of abstraction), which is not something raw sockets provide. >> loads of internal consistency checks > Library correctness isn't a unique feature. Not sure what that means. ZeroMQ's claimed value-add here is in providing correctness in various languages, that you would not get otherwise when using raw sockets. >> huge community > I don't think you can get 'huger' than the community around sockets. People writing socket code in C don't go to SocketConf and meet people writing socket code in Python. They don't idle in #socket on IRC. They don't swap blog posts about the cool 'socket patterns' they wrote today. It's not a community. >> and seamless support for inter-thread transport as well as TCP and multicast > Inter-thread transport of already-serialized messages at the transport protocol layer doesn't make a ton of sense from an efficiency perspective. It's a feature nonetheless. That you think it doesn't make sense 'from an efficiency perspective' does not invalidate that feature. >> protection from memory overflows > This has essentially nothing to do with a networking library. Plenty of environments have safe/efficient zero-copy chained byte buffer implementations/libraries. But you don't get that with raw sockets in every environment, which is the point. |