2012-12-04 42 views
5

我有得到一个C#zeromq客户端从使用 所述订阅发布图案的C++服务器接收消息的问题。ZeroMQ C#客户端未接收到C++服务器发布/订阅版本3.2

服务器设置是一个传输层用两种类型的传输 策略(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的

//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"); 

      } 
     } 

我的C#客户端没有收到任何消息,我尝试了所有编码沉绵的UTF8 作品为ReqRep。

回答

2

你提到你没有在C#和C++项目中使用相同版本的libzmq,可能是这个问题吗?在无意中使用libzmq 2.x和3.x时,我遇到了同样的问题。还有没有任何同步代码可以确保您在用户连接后发布消息(参见ZMQ指南中的“慢速连接器综合症”)?

相关问题