.net c#zeromq请求-同时应答

.net c#zeromq请求-同时应答,c#,.net,zeromq,C#,.net,Zeromq,我对ZeroMq比较陌生 我想做的是同时发送请求和接收回复。 我读了很多例子和ZeroMq指南,但我不知道如何实现这一点 目前,我的代码如下所示: public void SendRequestAsync<T>(T request) { Task.Factory.StartNew(() => { using (ZmqSocket socket = _context.CreateSocket(SocketType.REQ))

我对ZeroMq比较陌生

我想做的是同时发送请求和接收回复。 我读了很多例子和ZeroMq指南,但我不知道如何实现这一点

目前,我的代码如下所示:

public void SendRequestAsync<T>(T request)
  {
     Task.Factory.StartNew(() =>
     {
        using (ZmqSocket socket = _context.CreateSocket(SocketType.REQ))
        {
           string endPoint = string.Format("tcp://{0}:{1}", ServiceIpAddress, Port);
           socket.Connect(endPoint);

           var serializer = new XmlSerializer(request.GetType());

           using (var byteStream = new MemoryStream())
           {
              serializer.Serialize(byteStream, request);
              socket.Send(byteStream.ToArray());
           }
        }
     });

     if (!_isListening)
     {
        StartListeningForReplies();
     }
  }

  private void StartListeningForReplies()
  {
     _responseThread = new Thread(ReplyThreadStart);
     _responseThread.Start();

     _isListening = true;
  }

  private void ReplyThreadStart()
  {
     using (var replySocket = _context.CreateSocket(SocketType.REQ))
     {
        string endPoint = string.Format("tcp://*:{0}", Port);
        replySocket.Bind(endPoint);

        while (!_listeningAborted)
        {
           byte[] buffer = new byte[1024];
           replySocket.Receive(buffer);

           // put into queue for processing
        }
     }
  }
public void SendRequestAsync(T请求)
{
Task.Factory.StartNew(()=>
{
使用(ZmqSocket套接字=_context.CreateSocket(SocketType.REQ))
{
string endPoint=string.Format(“tcp://{0}:{1}”,ServiceIpAddress,端口);
socket.Connect(端点);
var serializer=新的XmlSerializer(request.GetType());
使用(var byteStream=newmemorystream())
{
serializer.Serialize(byteStream,request);
Send(byteStream.ToArray());
}
}
});
如果(!\u正在列表)
{
惊讶地倾听回复();
}
}
private void StartListeningForReplies()
{
_responseThread=新线程(ReplyThreadStart);
_responseThread.Start();
_isListening=true;
}
私有void ReplyThreadStart()
{
使用(var replySocket=_context.CreateSocket(SocketType.REQ))
{
string endPoint=string.Format(“tcp://*:{0}”,端口);
replySocket.Bind(端点);
while(!\u listingaborted)
{
字节[]缓冲区=新字节[1024];
replySocket.Receive(缓冲区);
//放入队列进行处理
}
}
}
我以前创建过一个上下文,并使用此上下文创建套接字

我是否需要使用不同的端口进行发送和接收,以及使用另一个端口进行发布


请帮助。

您了解不同类型套接字(REP/REQ/DEALER/ROUTER/PUB/SUB)背后的想法吗?我已经正确实现了。是的,我知道我现在知道了区别。我现在需要结束这个问题吗?