[nanomsg] Re: Receiving on a few sockets; receiving from different SP protocols

  • From: Garrett D'Amore <garrett@xxxxxxxxxx>
  • To: nanomsg@xxxxxxxxxxxxx
  • Date: Sun, 30 Oct 2016 18:24:30 -0700

if you need to block in a single thread on multiple sockets then yes nn_poll is 
probably the best way to do that. 

having multiple protocols accessible on the same socket would be nonsensical as 
they have very different semantics.  sorry. 

Sent from my iPhone

On Oct 29, 2016, at 7:06 PM, SGSeven Algebraf <a1rex2003@xxxxxxxxx> wrote:

Thank you James for your email!  

What I am trying to achieve is the blocking wait on multiple messages types 
in the same thread.

What would be the most convenient is what Garrett stated on Wed, 11 May 2016 :

"I hope to have a different, and superior, notification mechanism

involving callbacks that the application can register"

Indeed, that would be a huge, colossal breakthrough in terms of the 
convenience and modern approach.

Thank you,

- Samuel





On Sat, Oct 29, 2016 at 9:17 PM, James Root <jamesroot@xxxxxxxxx> wrote:
Samuel,

I believe the best way to achieve what you are looking for is nn_poll 
(http://nanomsg.org/v1.0.0/nn_poll.3.html). You store your sockets in a way 
that you can look up what type they are when nn_poll tells you they are 
ready.

I believe the reason a socket cannot have multiple types is because many 
(all?) of the types are fundamentally different. For example, a reply socket 
could never be paired with a sub socket (because you can never send on the 
sub socket).

I hope this helps you!

- James Root

On Sat, Oct 29, 2016 at 8:44 PM, SGSeven Algebraf <a1rex2003@xxxxxxxxx> 
wrote:
Being new to nanomsg I am not accustom yet how things work.

A few questions follows:

1)  The documentation says that I can call nn_bind and nn_connect multiple 
times on the same socket .

s = nn_socket (AF_SP, NN_PAIR);

eid1 = nn_connect (s, "inproc://test");

eid2 = nn_connect (s, "tcp://127.0.0.1:5560");

Is there a way to know which endpoint sent a message (eid1 or eid2) when I 
receive it by:

nn_recv (s, &buf, NN_MSG, 0);

?



2) I guess that I cannot mix different SP protocols on the same socket and 
have to setup different threats for every socket type.



It would be potentially beneficial if  nn_receive could get a message 

a) from multiple nanomsg sockets (potentially configured with different 
protocols) : 

nn_recv_from_sockets (socketArray, &buf, NN_MSG, 0);

or 

b) from different protocols

I guess what I need for case  b) is:

s = nn_socket (AF_SP, NN_ALL);

// or

s = nn_socket (AF_SP, NN_SUB | NN_PAIR);

or alternatively forcing nn_receive to receive from different SP senders

nn_recv (s, &buf, NN_MSG, 0, NN_ALL);

Another way to be able to receive from different SP could be a

nn_recv (s, &buf, NN_MSG, 0, NN_SUB | NN_PAIR);



(nn_send could indicate used protocol by having an extra parameter)



Is there any way or potential benefits to provide the mentioned above 
functionalities or am I misguided?



Thank you,

- Samuel



Other related posts: