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
Trả lời
Có một vài nguyên tắc cơ bản để liên kết và kết nối nào. Nói chung, zeromq không quan tâm *, nó chỉ phụ thuộc vào bạn những gì thuận tiện hơn.
Đối với một cặp nhất định socket mà sẽ nói chuyện với nhau, sau đây là một vài câu hỏi để hỏi để tìm ra nên ràng buộc và có nên kết nối:
- Liệu một trong những quá trình sống lâu hơn khác (tức là một người bắt đầu, làm điều gì đó, dừng lại, trong khi người kia ngồi và chạy một thời gian dài)? Nếu vậy, người sống lâu hơn nên ràng buộc.
- Bạn có nhiều phiên bản của một bên hay bên kia không? Nếu vậy, một trong đó không phải là nhiều (hoặc một trong đó có ít trường hợp) nên ràng buộc, bởi vì đó là ít URL để theo dõi.
Đây chủ yếu là giúp quản lý URL và kết nối dễ dàng hơn. Trong ví dụ lỗ thông hơi/chìm, có chính xác một máy thở và một bồn rửa, nhưng có thể có bất kỳ số lượng công nhân nào (từ 0 đến nhiều). Nếu bồn rửa và lỗ thông hơi bị trói buộc, thì họ không cần phải biết về công nhân khi họ đến và đi. Chỉ có hai URL để theo dõi, trong khi nếu các công nhân bị ràng buộc, bạn sẽ phải theo dõi URL cho mỗi nhân viên mới, và nói với bồn rửa và/hoặc lỗ thông hơi về URL mới mỗi khi một nhân viên mới đến.
* nó thực sự có thể quan trọng trong một số trường hợp cạnh, nhưng không phải là chung.
- 1. multiprocessing.Pool: Khi nào cần sử dụng, apply_async hoặc map?
- 2. Khi nào tôi cần sử dụng MPI_Barrier()?
- 3. Khi nào tôi cần sử dụng quaternions?
- 4. Khi nào tôi cần sử dụng @WebServiceRef?
- 5. Khi nào cần sử dụng Eventstore
- 6. Khi nào cần sử dụng singleTop launchMode trong một widget hoặc ứng dụng Android?
- 7. Khi nào sử dụng undef_method, và khi nào cần sử dụng remove_method?
- 8. Khi nào cần sử dụng viewDidLoad và khi nào thì sử dụng awakeFromNib
- 9. Khi nào cần sử dụng giao diện và khi nào cần sử dụng các chức năng bậc cao hơn?
- 10. Khi nào sử dụng Servlet hoặc @Controller
- 11. Zmq poller hoạt động như thế nào?
- 12. Khi nào cần sử dụng Request.UrlReferrer và khi Request.ServerVariables ["HTTP_REFERER"]?
- 13. Khi nào sử dụng NaN hoặc +/- Infinity?
- 14. Khi nào cần sử dụng socket.io và khi nào thì sử dụng ajax
- 15. Khi nào sử dụng giao diện hoặc lớp trừu tượng? Khi nào sử dụng cả hai?
- 16. Khi nào cần sử dụng con trỏ void?
- 17. Khi nào cần sử dụng công cụ xây dựng?
- 18. Sử dụng lớp << tự, khi nào cần sử dụng các lớp học hoặc mô-đun?
- 19. Khi nào cần sử dụng Xe buýt sự kiện?
- 20. Khi nào cần sử dụng Ống vs Khi sử dụng Bộ nhớ Chia sẻ
- 21. Khi nào cần sử dụng đồng bộ trong Java
- 22. Khi nào cần sử dụng Giao dịch trong SQL Server
- 23. __declspec là gì và khi nào tôi cần sử dụng?
- 24. Khi nào tôi cần sử dụng _.bindAll() trong Backbone.js?
- 25. Khi nào cần sử dụng con trỏ char chưa ký
- 26. Khi nào cần sử dụng Helpers thay vì Partials
- 27. Điều gì và khi nào cần sử dụng Tuple?
- 28. Khi nào cần sử dụng một mô-đun và khi nào nên sử dụng một lớp học
- 29. Khi nào sử dụng truy vấn hoặc mã số
- 30. Điều gì cần sử dụng: executeUpdate() hoặc execute()?
bạn không trả lời được câu hỏi của mình chưa? Tôi sử dụng zmq_bind để nghe trên socket và zmq_connect để kết nối với socket đó. – Filip
Ví dụ, tại sao chúng ta phải thiết kế bồn rửa như một máy chủ? tại sao không phải là khách hàng? Tại sao chúng ta cần phải thiết kế nhiệm vụ-người gửi như một khách hàng? tại sao không phải là máy chủ? – q0987
bạn KHÔNG CẦN - đó chỉ là ví dụ. Taskworker đẩy các kết quả vào bồn rửa chén. Nó có thể hoạt động giống như yêu cầu - trả lời quá, tôi đoán vậy. – Filip