ZeroMQ C#客户端未接收c ++服务器发布/订阅版本3.2

时间:2012-12-04 11:30:27

标签: c# c++ zeromq

我在使用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 ++客户端订阅者收到消息 形成发布者。

简而言之,我在PubSub中的c#客户端

//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。

1 个答案:

答案 0 :(得分:2)

你提到你在C#和C ++项目中没有使用相同版本的libzmq,可能是问题吗?在无意中使用libzmq 2.x和3.x

时,我遇到了同样的问题 还有任何同步代码,以确保您在订户连接后发布消息(请参阅ZMQ指南中的“慢速木匠综合症”)?