zeromq/exzmq

Is this zeromq 3.1 or ZMTP 3.1?

drozzy opened this issue · 7 comments

It's unclear whether this is an outdated version of zeromq binding (3.1) or an up-to-date ZMTP implementation.

lawik commented

It looks to me like it is attempting 3.x or such. But when looking at the Exzmq.Frame.encode I'm really confused comparing it to: http://api.zeromq.org/3-1:zmq-tcp
0x02 doesn't make sense to me, am I missing something? Where are the flags?
I'd love to see a ZeroMQ binding for elixir so I was looking at adding multipart, but now I'm not sure if the base version is actually protocol compatible.

Happy to be proven wrong :)

Well, this project originally implemented ZMTP 1.0 with Elixir ~0.13 and I tried to update it during the FOSDEM hackathon, see 2476c75

It would be great to make it an up-to-date ZMTP implementation, and all contributions are very appreciated. Feel free to participate!

Chumak is absolutely fantastic!

We could change this project to a wrapper for Chumak and then, maybe, re-implement it step-by-step in Elixir.

There is a fundamental difference between zeromq version (currently at 4.1.5) and zmtp version (currently at 3.1). The former (zeromq) is an implementation of the protocol, while the latter (zmtp) - the protocol itself. I see a lot of bindings not making this distinction properly (or not presenting a clear picture to the user). That is why I raised this issue.

@c-rack I think it's better not to wrap or re-implement it, but to add to it. For example, what I'm missing in chumak right now is curvezmq security. If someone were to implement it and make it compatible with chumak (even in Elixir!) that would be great.

lawik commented

Appreciate the clarifications.

Chumak seems great, noted that it doesn't have multipart though. Tried digging into the source but I'm fairly new at Elixir so reading Erlang is still a bit like pulling teeth for me. Might have to push through it though if I want those multipart calls working :)

lawik commented

On the note of wrapping or re-implementing, I guess it depends on how hard using it is from Elixir. It doesn't look like it differs greatly from how you would structure the Elixir code (looking at https://github.com/chovencorp/chumak/blob/master/examples/req_client.erl).
I guess you could make an extremely thing wrapper if you want to use Chumak instead of :chumak. If I understand things correctly.

Then I guess findings contributors might be easier with the current popularity Elixir is seeing if the code wasn't in Erlang, but I'm not sure.