gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:03 32 4
gpt4 key购买 nike

我在使用 C# zeromq 客户端接收来自 C++ 服务器的消息时遇到问题订阅 Release模式。

服务器设置是一个传输层,有两种类型传输策略(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 工作。

最佳答案

您提到您在 C# 和 C++ 项目中使用的 libzmq 版本不同,这可能是问题所在吗?我在无意中使用 libzmq 2.x 和 3.x 时遇到了同样的问题

是否还有任何同步代码可确保您在订阅者连接后发布消息(请参阅 ZMQ 指南中的“慢连接综合症”)?

关于c# - ZeroMQ C# 客户端未接收到 C++ 服务器发布/订阅版本 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701889/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com