2012-09-27 37 views
5

Tôi mới sử dụng ZeroMQ, (và lập trình với ổ cắm nói chung), nhưng tôi đang cố gắng triển khai (trong Java) một mô hình ngang hàng trong ZeroMQ. Những gì tôi muốn là khi một nút đến trực tuyến, nó sẽ phát sóng cho toàn bộ mạng là thông báo "Tôi ở đây và bạn có thể liên hệ với tôi theo địa chỉ này: ...".zeromq phát sóng tới toàn bộ mạng

Tôi nghĩ rằng nếu 2 hoặc nhiều nút xuất hiện trên mạng, họ sẽ có thể tìm thấy nhau mà không cần phải đi qua điểm cuối đã biết.

Có ai có ý tưởng nào về cách tôi có thể đạt được điều này không? Điều này có thể thực hiện được với ZeroMQ không?

Trả lời

4

Điều bạn đang yêu cầu không thể thực hiện được với zmq. Không có cơ chế (không có điểm cuối đã biết và được xác định) cho phép bạn 'biết' khi nhà xuất bản trực tuyến và các thông báo của nó sẵn sàng để đăng ký.

Điều đó đang được nói, nó là khá tầm thường để thiết lập một cái gì đó sắp xếp này bằng cách sử dụng một bộ định tuyến XPub and XSub (yêu cầu một điểm cuối đã biết). Bạn cũng có thể tạo 'điểm cuối' của riêng mình mà tất cả khách hàng kết nối với việc sử dụng một ổ cắm REQ/REP. Điều này sẽ cho phép bạn có một trung tâm (về bản chất là directory service) mà sau đó bạn có thể kết nối điểm tới các kết nối đăng ký/xuất bản điểm (điều này sẽ giữ cho sự sao chép mạng của bạn ở mức thấp nhất).

0

Bạn có thể muốn làm điều đó như thế này với UDP:

  1. Tất cả các nút nghe một cổng UDP cố định cho người mới
  2. Khi một nút mới đi lên nó sẽ gửi một thông điệp UDP vào mạng (hoặc phát sóng nếu có) và tất cả những người khác nhận được nó, do đó, biết sự hiện diện của nó
  3. Bây giờ bạn có thể sử dụng điểm cuối cố định tức là zmq để thực hiện giao tiếp.

Có một ví dụ C bạn có thể muốn xem xét https://github.com/stanwu/udp-broadcast

  • Nếu bạn có ba máy với IP 192.168.1.10/11/12
  • On 192.168.1.10 và 192.168.1.11 bắt đầu ./udpServer
  • Trên 192.168.1.12 chạy ./udpClient 192.168.1.0 I-AM-HERE-192.168.1.12-PORT-7777
  • Bây giờ 192.168.1.10/11 biết có người mới trên 192.168.1.12 chạy một số người nghe trên 7777
0

Tôi sử dụng UDP cho điều này trong hệ thống hiện có trên mạng LAN. Nó hoạt động tốt. Các vấn đề duy nhất bạn phải xem là các gói UDP không được đảm bảo phân phối. Họ sẽ thực sự bị lạc vì vậy bạn cần phải nhân tố trong một chương trình phát lại lặp lại. Bạn cũng nhận được phân mảnh gói, vì vậy hãy đảm bảo rằng các thư nhỏ nhưng bạn chỉ phải gửi đủ thông tin để thiết lập kết nối cho ZMQ hoặc TCP hoặc RabbitMQ hoặc bất kỳ thứ gì khác. Các vấn đề tiềm năng khác là tường lửa và VPN.

Các vấn đề liên quan