2013-08-26 27 views
5

Tôi đang cố gắng thực hiện kiến ​​trúc quán rượu/phụ nơi nhiều nhà xuất bản và nhiều người đăng ký tồn tại trên cùng một xe buýt. Theo những gì tôi đã đọc trên internet, chỉ có một socket nên gọi bind(), và tất cả những thứ khác (cho dù pub hay sub) nên gọi connect().Tôi làm cách nào để thực hiện nhiều nhà xuất bản với một điểm cuối duy nhất trong ZeroMQ?

Vấn đề là, với cách tiếp cận này, tôi thấy rằng chỉ nhà xuất bản thực sự gọi bind() trên socket mới xuất bản thư. Tất cả các nhà xuất bản của tôi gọi kết nối() dường như không hoạt động âm thầm và không thực sự xuất bản bất kỳ tin nhắn nào lên xe buýt. Tôi đã xác nhận đây không phải là vấn đề chính của người đăng ký, vì tôi đã viết một ứng dụng "sniffer" đơn giản đăng ký tất cả tin nhắn trên xe buýt và chỉ hiển thị nhà xuất bản có tên bind().

Nếu tôi thử nhiều liên kết với nhà xuất bản, hành vi zmq "được mong đợi" của âm thầm ăn cắp bus xảy ra với ipc và lỗi cổng sử dụng được ném bằng tcp.

Tôi đã xác minh hành vi này với điểm cuối ipc và tcp, nhưng cuối cùng hệ thống đầy đủ sẽ sử dụng epgm. Tôi giả sử (mặc dù tất nhiên có thể sai) rằng trong tình huống này tôi sẽ không cần một nhà môi giới vì không có phát hiện năng động xảy ra (các thiết bị đầu cuối được biết, cho dù ipc, tcp, hoặc multicast epgm).

Có điều gì tôi thiếu, có lẽ là cài đặt ổ cắm, điều đó có thể khiến các nhà xuất bản kết nối không thực sự gửi dữ liệu của họ không? Theo các tài liệu tôi đã thấy trên internet, tôi đang làm những việc "đúng" cách nhưng nó vẫn không hoạt động.

Để tham khảo, lớp nhà xuất bản của tôi có những phương pháp sau đây để thiết lập các thiết bị đầu cuối:

ZmqPublisher::ZmqPublisher() 
: m_zmqContext(1), m_zmqSocket(m_zmqContext, ZMQ_PUB) 
{} 


void ZmqPublisher::bindEndpoint(std::string ep) 
{ 
    m_zmqSocket.bind(ep.c_str()); 
} 

void ZmqPublisher::connect(std::string ep) 
{ 
    m_zmqSocket.connect(ep.c_str()); 
} 

Vì vậy, cuối cùng, câu hỏi của tôi là thế này: cách thích hợp để xử lý nhiều nhà xuất bản trên thiết bị đầu cuối cùng là gì, và tại sao tôi không thấy tin nhắn từ nhiều nhà xuất bản?

+0

Câu hỏi của bạn không rõ ràng; xem xét sửa đổi. – raffian

Trả lời

2

Nó có thể hoặc có thể không liên quan, nhưng The 0MQ Guide có nhận xét hơi bí ẩn sau:

Về lý thuyết với ổ cắm ØMQ, nó không quan trọng mà cuối kết nối và ràng buộc kết thúc. Tuy nhiên, trong thực tế có những khác biệt không có giấy tờ mà tôi sẽ đến sau. Bây giờ, ràng buộc PUB và kết nối SUB, trừ khi thiết kế mạng của bạn làm cho điều đó là không thể.

Tôi chưa phát hiện ra nơi "đến sau" thực sự xảy ra, nhưng tôi không sử dụng pub/sub quá nhiều và chưa đọc phần "Mẫu Pub-Sub nâng cao" của hướng dẫn trong chi tiết rõ ràng.

Tuy nhiên, ý tưởng của nhiều nhà xuất bản trên một điểm kết thúc, với tôi, cho thấy sự cần thiết của một nhà môi giới kiểu XPUB/XSUB; nó không phải là về khám phá năng động, đó là về một điểm liên lạc và định tuyến. Cuối cùng, tôi nghĩ một cấu trúc liên kết dựa trên môi giới sẽ đơn giản hóa ứng dụng của bạn và giúp dễ dàng xác định vấn đề hơn.

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