Aynı veri yolunda birden fazla yayıncının ve çoklu abonenin bulunduğu bir pub/alt mimariyi yapmaya çalışıyorum. İnternette okuduğum şeye göre, sadece bir soket bind() 'i çağırmalı ve diğerleri (pub veya sub) connect()' i çağırmalıdır.ZeroMQ'da tek bir uç noktaya sahip birden fazla yayıncıyı nasıl yaparım?
Sorun, bu yaklaşımla, aslında yuvadaki bind() işlevini çağıran yayıncıların hiç ileti yayınlamadığını buluyorum. Connect() işlevini çağıran tüm yayıncılarım sessizce başarısız oluyor ve aslında herhangi bir iletiyi otobüse yayınlamıyor gibi görünüyor. Bu bir abone önemli bir sorun değil, otobüste tüm mesajlarına abone olan basit bir "sniffer" uygulaması yazdım ve yalnızca bind() adlı yayıncı gösteriliyor.
Yayımcı ile birden çok bağlama girişiminde bulunursam, sessizce veri çalmayı "beklenen" zmq davranışı ipc ile gerçekleşir ve kullanımdaki bir bağlantı hatası tcp ile atılır.
Bu davranışı ipc ve tcp uç noktaları ile doğruladım, ancak sonuçta tam sistem epgm kullanıyor olacak. Bu durumda, dinamik bir keşif olmadığından (ipuç, tcp veya epgm multicast olsun uç noktaları bilinmediğinden) bir komisyoncuya ihtiyaç duymayacağımı düşünüyorum.
Eksik olan bir şey var mı, belki de bir yuva ayarı, bu da bağlantı yayıncılarının verilerini göndermemesine neden olacak mı? İnternette gördüğüm literatüre göre, “doğru” bir şey yapıyorum ama hala işe yaramıyor. Aynı son nokta üzerinde birden yayıncıları işlemek için uygun yolu nedir ve:
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());
}
Yani sonuçta, sorum şu: Referans olarak
, benim yayıncı sınıf bitiş noktası kurmak için aşağıdaki yöntemleri vardır neden birden fazla yayıncının mesajlarını görmüyorum?
Sorunuz açık değil; gözden geçirmeyi düşünün. – raffian