zmq - 何时使用zmq_bind或zmq_connect

q09*_*987 15 zeromq

Refer to http://hintjens.wdfiles.com/local--files/main:files/cc1pe.pdf
Page 22 Chapter Divide and Conquer

                    Ventilator[PUSH]
        ___________________|____________________             
        |                  |                   |
[PULL]Worker[PUSH] [PULL]Worker[PUSH]  [PULL]Worker[PUSH]
        |__________________|___________________|             
                           |                   
                     [PULL]Sink

// taskvent.c
    //  Socket to send messages on
    void *context = zmq_ctx_new ();
    void *sender = zmq_socket (context, ZMQ_PUSH);
    zmq_bind (sender, "tcp://*:5557");

    //  Socket to send start of batch message on
    void *sink = zmq_socket (context, ZMQ_PUSH);
    zmq_connect (sink, "tcp://localhost:5558");

// taskwork.c
    //  Socket to receive messages on
    void *context = zmq_ctx_new ();
    void *receiver = zmq_socket (context, ZMQ_PULL);
    zmq_connect (receiver, "tcp://localhost:5557");

    //  Socket to send messages to
    void *sender = zmq_socket (context, ZMQ_PUSH);
    zmq_connect (sender, "tcp://localhost:5558");

// tasksink.c
    //  Prepare our context and socket
    void *context = zmq_ctx_new ();
    void *receiver = zmq_socket (context, ZMQ_PULL);
    zmq_bind (receiver, "tcp://*:5558");

I feel confused when to use zmq_bind or zmq_connect.
It says that most of time "Server" uses zmq_bind and "Client" uses zmq_connect.

Question> When I should use zmq_bind and when I should I use zmq_connect?

http://api.zeromq.org/
zmq_bind - accept incoming connections on a socket  
zmq_connect - create outgoing connection from socket
Run Code Online (Sandbox Code Playgroud)

min*_*nrk 19

绑定和连接的基本原则有几个.一般来说,zeromq并不关心*,这取决于你更方便的事情.

对于一对彼此交谈的给定套接字,这里有几个问题需要弄清楚哪些应该绑定以及哪些应该连接:

  1. 其中一个过程是否比另一个过程更长寿(即一个开始,做某事,停止,而另一个过程并且运行很长时间)?如果是这样,那么寿命较长的人应该绑定.
  2. 你有一方或另一方的多个实例?如果是这样,那个不是多个的(或者具有较少实例的那个)应该绑定,因为要跟踪的URL较少.

这些主要是为了更容易管理URL和连接.在通风口/水槽示例中,只有一个呼吸机和一个水槽,但可以有任意数量的工人(零到多).如果水槽和通风口都结合在一起,那么他们就不需要了解工人的来来往往.只有两个URL可以跟踪,而如果工作者绑定,则必须跟踪每个新工作人员的URL,并在每次新工作人员到达时告诉接收器和/或发布新URL.

*它实际上在某些边缘情况下很重要,但一般情况下并不重要.