zeromq / netmq

A 100% native C# implementation of ZeroMQ for .NET
Other
2.95k stars 744 forks source link

DEALER to ROUTER - Router Socket Dropping Every Other Message #828

Closed yDivide closed 3 years ago

yDivide commented 4 years ago

Environment

NetMQ Version: 4.0.0.197-pre
Operating System: Windows 10
.NET Version: .NET Core 2.1

Expected behaviour

Router receives and handles all multi-part messages sent by dealer

Actual behaviour

Router receives first, third, fifth, and so on multi-part messages from dealer. Even messages are not being received and cannot be traced.

Steps to reproduce the behaviour

Dealer sending message:

string serverAddress = string.Format("tcp://{0}:{1}", serverIpAddress, routerPort);
dealerSocket = new DealerSocket(serverAddress);
dealerSocket.Options.Identity = Encoding.Unicode.GetBytes(username);
dealerSocket.Connect(serverAddress);
dealerSocket.ReceiveReady += Client_ReceiveReady;

poller = new NetMQPoller { dealerSocket };
poller.RunAsync();

var data = serializer.Serialize(message);
dealerSocket.SendMoreFrameEmpty().SendFrame(data);

Router receiving message:

routerSocket.ReceiveReady += ListenForMessages;
            poller = new NetMQPoller() { routerSocket };
            poller.RunAsync();

Listen for mesages from router:

try
            {
                bool hasMore;
                var usernameString = a.Socket.ReceiveFrameBytes(out hasMore);

                if (hasMore)
                {
                    var receivedBuffer = a.Socket.ReceiveFrameBytes(out hasMore);
                    if (hasMore) receivedBuffer = a.Socket.ReceiveFrameBytes(out hasMore);

                    if (!hasMore && receivedBuffer != null && receivedBuffer.Length > 0)
                        incomingMessageQueue.Enqueue(receivedBuffer);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception caught in ROUTER message puller: {0}", ex.Message);
            }
stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had activity for 365 days. It will be closed if no further activity occurs within 56 days. Thank you for your contributions.