I try to process messages asynchronously in my server using the code below. If I use a request socket and send ONE request to this server it prints out a lot of "Starts a new Task to process the request." messages from the ReceiveReady-event.
To mee it seems like the poller raises to many events. Why? Whats wrong with my code?
Thank you!
using (var context = NetMQContext.Create())
using (var server = context.CreateRouterSocket())
using (var poller = new Poller())
{
server.Bind(string.Format("tcp://localhost:{0}", PortNumber));
server.ReceiveReady += (s, a) =>
{
Console.WriteLine("Starts a new Task to process the request.");
Task.Factory.StartNew(() =>
{
var identity = a.Socket.ReceiveFrameString();
var empty = a.Socket.ReceiveFrameString();
var message = a.Socket.ReceiveFrameString();
Console.WriteLine("Received message from: {0}, message: {1}", identity, message);
a.Socket.SendMoreFrame(identity);
a.Socket.SendMoreFrameEmpty();
a.Socket.SendFrame("ACK from server");
});
};
poller.AddSocket(server);
poller.PollTillCancelledNonBlocking();
Console.ReadKey();
}
}