bind is passive, while connect is active. You might want to try having the proxy bind, and have both pub and sub connect to it.
On Wed, Oct 18, 2017 at 4:34 AM, 杨云召 <[email protected]> wrote: > Hi All: > Sorry for my poor englith. > In my requirement, it have 0..N publishers and 0...N subscribers. > I have 3 programs such as follow. > I can freedom add/sub subscriber which only know the proxy ip info. > But I can not add or sub any publisher when proxy is running. > Could you give me some tips about how to add/sub a publisher in > "XPUB/XSUB" model? > Thanks a lot. > > proxy: > int main(int argc, char ** argv) > { > void * ctx = zmq_ctx_new(); > void * xsub = zmq_socket(ctx, ZMQ_XSUB); > zmq_connect(xsub, "tcp://192.168.2.42:6000"); /// one > publiser > zmq_connect(xsub, "tcp://192.168.2.6:6000"); /// another > publisher > void * xpub = zmq_socket(ctx, ZMQ_XPUB); > zmq_bind(xpub, "tcp://192.168.2.6:6001"); > zmq_proxy(xsub, xpub, NULL); > return 0; > } > > pub: > int main(int argc, char ** argv) > { > void * ctx = zmq_ctx_new(); > void * pub = zmq_socket(ctx, ZMQ_PUB); > zmq_bind(pub, "tcp://*:6000"); > > while (true) > { > std::stringstream ss; > ss << time(NULL) << "-" << argv[1]; > zmq_send(pub, ss.str().c_str(), ss.str().size(), 0); > Sleep(1000); > } > } > > sub: > int main(int argc, char ** argv) > { > void * ctx = zmq_ctx_new(); > void * sub = zmq_socket(ctx, ZMQ_SUB); > zmq_connect(sub, "tcp://192.168.2.6:6001"); > zmq_setsockopt(sub, ZMQ_SUBSCRIBE, 0, 0); > while (true) > { > char buffer[256]; > int size = zmq_recv(sub, buffer, 255, 0); > if (size == -1) > { > Sleep(0); > continue; > } > buffer[size] = '\0'; > printf("run_sub == %s\n", buffer); > } > } > > ------------------------------ > [email protected] > > _______________________________________________ > zeromq-dev mailing list > [email protected] > https://lists.zeromq.org/mailman/listinfo/zeromq-dev > >
_______________________________________________ zeromq-dev mailing list [email protected] https://lists.zeromq.org/mailman/listinfo/zeromq-dev
