问题描述
我提供了一项服务,该服务在NetMQ的0MQ路由器套接字上接受请求,并且几乎像其他应用程序的缓存一样工作,即它可以接收“ GET”请求并发送响应,或者可以接收“ PUT”不需要响应的请求。
但是我有两个问题:
-
我尝试在客户端代码中使用
RequestSocket
,但是如果我在发送消息后不等待响应,它仍然会失败(我想这就是REQ / REP在0MQ中的工作方式)。如果我只想获得 some 消息类型的响应,什么是合适的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();
}
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)