C# 用于类缓存服务的ZeroMQ体系结构
我做了一个服务,它在NetMQ中的0MQ路由器套接字上接受请求,其作用主要类似于其他应用程序的缓存,即它可以接收“GET”请求并发送响应,也可以接收不需要响应的“PUT”请求 不过,我有两个问题:C# 用于类缓存服务的ZeroMQ体系结构,c#,multithreading,zeromq,netmq,C#,Multithreading,Zeromq,Netmq,我做了一个服务,它在NetMQ中的0MQ路由器套接字上接受请求,其作用主要类似于其他应用程序的缓存,即它可以接收“GET”请求并发送响应,也可以接收不需要响应的“PUT”请求 不过,我有两个问题: 我尝试在客户端代码中使用RequestSocket,但如果在发送消息后不等待响应,它仍然失败(我猜这就是REQ/REP在0MQ中的工作方式)。如果我只想获得某些消息类型的响应,那么什么是合适的0MQ套接字类型 当前,我的客户端代码在需要与服务通信时创建一个新的RequestSocket实例。在Net
RequestSocket
,但如果在发送消息后不等待响应,它仍然失败(我猜这就是REQ/REP在0MQ中的工作方式)。如果我只想获得某些消息类型的响应,那么什么是合适的0MQ套接字类型
RequestSocket
实例。在NetMQ中是否有一种线程安全的方式,在需要发送请求和获得响应时,可以通过客户端代码重用单个套接字,而无需每次创建新连接
var socket = new RouterSocket(endpoint);
socket.ReceiveReady += (sender, e) =>
{
var msg = e.Socket.ReceiveMultipartMessage();
var action = msg[3].ConvertToString();
switch (action)
{
case "GET":
{
var key = msg[4].ConvertToString();
var data = _cache.Get(key);
var response = new NetMQMessage();
response.Append(msg[0]); // msg id
response.Append(NetMQFrame.Empty);
response.Append(msg[4]);
response.Append(data);
e.Socket.SendMultipartMessage(response);
}
break;
case "SET":
{
var key = msg[4].ConvertToString();
var data = msg[5].Buffer;
_cache.Set(key, data);
// no response needed here, but needed for RequestSocket clients
}
break;
default: throw new NotImplementedException();
}
};
你试过DealerSocket吗?我认为这是RequestSocket的“异步”对应。您尝试过DealerSocket吗?我认为这是RequestSocket的“异步”对应。