celluloid / celluloid-zmq

UNMAINTAINED: See celluloid/celluloid#779 - Celluloid actors that talk over the 0MQ protocol
https://celluloid.io
MIT License
83 stars 25 forks source link

zmq_proxy / ZMQ::Poll in Actor #33

Open alhafoudh opened 10 years ago

alhafoudh commented 10 years ago

Hi, how to properly start and handle zmq_proxy or at least ZMQ::Poll?

For example for ROUTER and DEALER socket pair.

Asmod4n commented 10 years ago

Its rather straightforward how to do DEALER and ROUTER stuff, made a small gist for it https://gist.github.com/Asmod4n/9372750 /cc @tarcieri

alhafoudh commented 10 years ago

Thanks for the example, but I cannot see the proxying of the messages from ROUTER to DEALER and back in the example.

Asmod4n commented 10 years ago

The server(dealer) sends messages to the handler(router), the handler then sends information back and the server reads them.

alhafoudh commented 10 years ago

I am not quite sure to which ZMQ pattern are you referring to, but I refer to this pattern:

http://zguide.zeromq.org/page:all#Shared-Queue-DEALER-and-ROUTER-sockets https://github.com/imatix/zguide/raw/master/images/fig16.png

ROUTER and DEALER are on same node and passing messages internally e.g. proxying

I apologize if this was not clear from the issue description.

Asmod4n commented 10 years ago

The polling is done in the Reactor: https://github.com/celluloid/celluloid-zmq/blob/master/lib/celluloid/zmq/reactor.rb#L13 or do you mean https://github.com/chuckremes/ffi-rzmq/blob/master/lib/ffi-rzmq/device.rb ? @alhafoudh

alhafoudh commented 10 years ago

As I understand the polling in Reactor is to do the the actor signaling efficient, but I need to make another Poller inside an Actor with two sockets. The DealerSocker and RouterSocket. Yes, the Device in ffi-rzmq is exactly what I need, but the celluloid-zmq does not play well with it :(

Asmod4n commented 10 years ago

I believe you have to run it in its own actor.

At least the specs here do it that way https://github.com/chuckremes/ffi-rzmq/blob/master/spec/device_spec.rb#L30 ^^

alhafoudh commented 10 years ago

Yes, but when zmq_proxy is called the program control is never returned and this is a problem for celluloid actors

Asmod4n commented 10 years ago

@alhafoudh https://github.com/zeromq/czmq will sonnish(i hope) release a 3.0 version of its high level C binding which does this in the background. I have written a ruby ffi wrapper for it which i will release once they release czmq 3, that wrapper will then maybe become the new basis for celluloid-zmq.