Клиент ZeroMQ C # не получает версии для публикации / подписки сервера C ++ 3.2

У меня проблемы с получением клиентом c # zeromq сообщений с сервера c ++ с использованием шаблона публикации подписки.

Настройка сервера представляет собой один транспортный уровень с двумя типами транспортных стратегий (PublishSubsribe и RequestReply). Они написаны на C ++ и используют версию 3.2.0 libzmq.

class PublishSubsribe : public ITransportStrategy
{
private:
     zmq::context_t _context;
     zmq::socket_t _socket;

public:

    PublishSubsribe(std::string url)
        :
    _context(1),
    _socket(_context, ZMQ_PUB)
    {
        std::cout << "Binding  " << url << std::endl;
        _socket.bind(url.c_str());
    }

    virtual void Wait()
    {
        boost::this_thread::sleep(boost::posix_time::milliseconds(100));
    }

    virtual void Send(zmq::message_t& message) 
    {
        _socket.send(outMessage) ;
    }
    ..
};  
class RequestReply : public ITransportStrategy
{
private:
     zmq::context_t _context;
     zmq::socket_t _socket;

public:

    RequestReply(std::string url)
        :
    _context(1),
    _socket(_context, ZMQ_REP)
    {
        _socket.bind(url.c_str());
    }

    virtual void Send(zmq::message_t& message) 
    {
        _socket.send(message);
    }

    virtual void Wait()
    {
        zmq_msg_t request;
        zmq_msg_init (&request);
        zmq_msg_recv (&request, _socket, 0);
        zmq_msg_close (&request);
    }
    ..
};

Шаблон запроса / ответа работает, когда клиенты либо c # / c ++. Это заставляет меня думать, что нет проблемы с кодировкой ... хотя, возможно, ошибаюсь. Кроме того, у меня есть клиентский подписчик на C ++, который получает сообщения от издателя.

Короче говоря, мой клиент C # в PubSub

//Bundled libzmq version: **3.2.2-rc2**  

        using (ZmqContext context = ZmqContext.Create())
        using (ZmqSocket client = context.CreateSocket(SocketType.SUB))
        {
            client.Connect("tcp://192.168.2.12:5555");

            client.SubscribeAll();
            while (true)
            {
                var msg = client.Receive(Encoding.UTF8);
                Console.WriteLine("Received Pub/Sub: yes");

            }
        }

не получает никаких сообщений, и я перепробовал все кодировки, хотя UTF8 работает для ReqRep.


person user1875444    schedule 04.12.2012    source источник


Ответы (1)


Вы упомянули, что не используете одну и ту же версию libzmq в проектах C # и C ++, может в этом проблема? У меня была такая же проблема, когда я невольно использовал libzmq 2.x и 3.x.

Also is there any synchronization code to ensure you publish messages after the subscriber connects (see "slow joiner syndrome" in the ZMQ Guide) ?

person JJ15k    schedule 04.12.2012