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?
Câu hỏi của bạn không rõ ràng; xem xét sửa đổi. – raffian