示例#1
0
 private void HeartBeatTimer_Elapsed(object sender, NetMQTimerEventArgs e)
 {
     //check for last heartbeat from server, set to throw on new send if exceeds certain threshold
     if (null != _session && null != _session.Crypto)
     {
         if ((DateTime.UtcNow - _session.LastHeartBeat).TotalMilliseconds
             > _heartBeatMs * _maxSkippedHeartBeatReplies)
         {
             _throwOnSend = true; //do not allow send
             _hostDead    = true;
             _logger.Debug("Heartbeat from server skipped {0} time. Host is dead.",
                           _maxSkippedHeartBeatReplies);
         }
         else
         {
             _logger.Debug("Heartbeat sent.");
             HeartBeatsSentCount++;
             _sendQueue.Enqueue(new List <byte[]> {
                 MessageHeader.HeartBeat
             });
         }
     }
     else
     {
         _throwOnSend = true; //do not allow send
     }
 }
示例#2
0
        public virtual Task <byte[]> SendRequestAsync(string service, byte[] message)
        {
            var outgoingMessage = new ClientEngine.OutgoingMessage(new TaskCompletionSource <byte[]>(), service, message, false);

            // NetMQQueue is thread safe, so no need to lock
            m_outgoingQueue.Enqueue(outgoingMessage);
            return(outgoingMessage.TaskCompletionSource.Task);
        }
示例#3
0
 public void AddToQue(StoredLogType logType, string logString, DateTime date, string applicationId)
 {
     if (string.IsNullOrEmpty(logString) == false)
     {
         queue.Enqueue(new RawLogData {
             Type = logType, Data = logString, IsListData = false, ReceiveDate = date, ApplicationId = applicationId
         });
     }
 }
示例#4
0
        //Executes on same poller thread as dealer socket, so we enqueue to the received queue
        //and raise the event on the client poller thread for received queue
        private void DealerSocket_ReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            var msg = e.Socket.ReceiveMultipartMessage();

            _logger.Debug("Message received. Frame count: {0}", msg.FrameCount);
            var message = msg.ToMessageWithoutClientFrame(_clientId);

            _receiveQueue.Enqueue(message.Frames);
        }
 public void SendMessage(string msg)
 {
     if (!string.IsNullOrEmpty(msg))
     {
         mRawDataStream.Write($"[{ DateTime.UtcNow:HH:mm:ss.fff}] >>   { msg }\n");
         mRawDataStream.Flush();
         mMessageQueue.Enqueue(msg);
     }
 }
示例#6
0
        private void DisposeClient()
        {
            var old = m_client;

            old.ReceiveReady -= OnReceiveReady;
            old.SendReady    -= OnSendReady;
            m_poller.Remove(old);
            m_pollerQueue.Enqueue(() => old.Dispose());
        }
示例#7
0
        public void EnqueueDequeue()
        {
            using (var queue = new NetMQQueue<int>())
            {
                queue.Enqueue(1);

                Assert.AreEqual(1, queue.Dequeue());
            }
        }
示例#8
0
        public void EnqueueDequeue()
        {
            using (var queue = new NetMQQueue <int>())
            {
                queue.Enqueue(1);

                Assert.AreEqual(1, queue.Dequeue());
            }
        }
示例#9
0
        public void Send(Guid clientId, List <byte[]> frames)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Client", "Cannot send on disposed client.");
            }
            if (null == frames || frames.Count == 0)
            {
                _logger.Error("Send message failed. Empty message.");
                throw new ArgumentException("Cannot be null or empty.", nameof(frames));
            }
            var message = new NetMQMessage();

            message.Append(clientId.ToByteArray());
            message.AppendEmptyFrame();
            if (null != _authRepository)
            {
                HostSession session = null;
                if (!_sessions.TryGetValue(clientId, out session))
                {
                    session = null;
                }
                if (null != session && null != session.Crypto)
                {
                    foreach (var frame in frames)
                    {
                        message.Append(session.Crypto.Encrypt(frame));
                    }
                }
                else
                {
                    _logger.Error("Send message failed. Protocol not established for this client {0}.", clientId);
                    throw new OperationCanceledException("Encrypted session not established.");
                }
            }
            else
            {
                foreach (var frame in frames)
                {
                    message.Append(frame);
                }
            }
            _sendQueue.Enqueue(message); //send by message to socket poller
        }
示例#10
0
        public void EnqueueDequeue()
        {
            using (NetMQContext context = NetMQContext.Create())
            using (NetMQQueue<int> queue = new NetMQQueue<int>(context))
            {
                queue.Enqueue(1);

                Assert.AreEqual(1, queue.Dequeue());
            }
        }
示例#11
0
        public void EnqueueDequeue()
        {
            using (NetMQContext context = NetMQContext.Create())
                using (NetMQQueue <int> queue = new NetMQQueue <int>(context))
                {
                    queue.Enqueue(1);

                    Assert.AreEqual(1, queue.Dequeue());
                }
        }
示例#12
0
        public void TryDequeue()
        {
            using (var queue = new NetMQQueue <int>())
            {
                Assert.IsFalse(queue.TryDequeue(out int result, TimeSpan.FromMilliseconds(100)));

                queue.Enqueue(1);

                Assert.IsTrue(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));
                Assert.AreEqual(1, result);
            }
        }
示例#13
0
文件: Program.cs 项目: xzoth/netmq
        public static void Main()
        {
            int count = 10000000;

            using (NetMQContext context = NetMQContext.Create())
            {
                NetMQQueue <int> queue = new NetMQQueue <int>(context);

                var task = Task.Factory.StartNew(() =>
                {
                    queue.Dequeue();

                    Stopwatch stopwatch = Stopwatch.StartNew();

                    for (int i = 0; i < count; i++)
                    {
                        queue.Dequeue();
                    }

                    stopwatch.Stop();

                    Console.WriteLine("Dequeueing items per second: {0:N0}", count / stopwatch.Elapsed.TotalSeconds);
                });

                queue.Enqueue(-1);

                Stopwatch writeStopwatch = Stopwatch.StartNew();

                for (int i = 0; i < count; i++)
                {
                    queue.Enqueue(i);
                }

                writeStopwatch.Stop();

                Console.WriteLine("Enqueueing items per second: {0:N0}", count / writeStopwatch.Elapsed.TotalSeconds);

                task.Wait();
            }
        }
示例#14
0
文件: Program.cs 项目: Robin--/netmq
        public static void Main()
        {
            int count = 10000000;

            using (NetMQContext context = NetMQContext.Create())
            {
                NetMQQueue<int> queue = new NetMQQueue<int>(context);

                var task = Task.Factory.StartNew(() =>
                {
                    queue.Dequeue();

                    Stopwatch stopwatch = Stopwatch.StartNew();

                    for (int i = 0; i < count; i++)
                    {
                        queue.Dequeue();
                    }

                    stopwatch.Stop();

                    Console.WriteLine("Dequeueing items per second: {0:N0}", count /stopwatch.Elapsed.TotalSeconds);
                });

                queue.Enqueue(-1);

                Stopwatch writeStopwatch = Stopwatch.StartNew();

                for (int i = 0; i < count; i++)
                {
                    queue.Enqueue(i);
                }

                writeStopwatch.Stop();

                Console.WriteLine("Enqueueing items per second: {0:N0}", count/writeStopwatch.Elapsed.TotalSeconds);

                task.Wait();
            }
        }
示例#15
0
        //occurs on socket polling thread to assure sending and receiving on same thread
        private void RouterSocket_ReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            var msg = e.Socket.ReceiveMultipartMessage();

            if (null == msg || msg.FrameCount < 2)
            {
                return;                                    //ignore this message - nothing in it
            }
            _logger.Debug("Message received. Frame count: {0}", msg.FrameCount);
            var message = msg.ToMessageWithClientFrame();

            _receivedQueue.Enqueue(message); //sends by message to host poller
        }
示例#16
0
        public void SendAck(NetMQMessage reply)
        {
            if (ReferenceEquals(reply, null))
            {
                throw new ArgumentNullException("reply");
            }

            if (ReferenceEquals(m_returnIdentity, null))
            {
                throw new Exception("You can only send a message after receiving a reply!");
            }

            var message = Wrap(reply, m_returnIdentity);

            if (m_requestId != null)
            {
                message.Append(m_requestId);
            }
            m_returnIdentity = null;
            m_requestId      = null;
            m_pollerQueue.Enqueue(() => Send(MDPCommand.Reply, null, message));
        }
示例#17
0
        public void TryDequeue()
        {
            using (var queue = new NetMQQueue<int>())
            {
                int result;
                Assert.IsFalse(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));

                queue.Enqueue(1);

                Assert.IsTrue(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));
                Assert.AreEqual(1, result);
            }
        }
示例#18
0
        public void TryDequeue()
        {
            using (NetMQContext context = NetMQContext.Create())
                using (NetMQQueue <int> queue = new NetMQQueue <int>(context))
                {
                    int result;
                    Assert.IsFalse(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));

                    queue.Enqueue(1);

                    Assert.IsTrue(queue.TryDequeue(out result, TimeSpan.FromMilliseconds(100)));
                    Assert.AreEqual(1, result);
                }
        }
示例#19
0
        private async Task ProcessMessageAsync <T>(
            Blockchain <T> blockchain,
            Message message,
            CancellationToken cancellationToken)
            where T : IAction
        {
            switch (message)
            {
            case Ping ping:
                _logger.Debug($"Ping received.");
                var reply = new Pong
                {
                    Identity = ping.Identity,
                };
                await ReplyAsync(reply, cancellationToken);

                break;

            case Messages.PeerSetDelta peerSetDelta:
                _deltas.Enqueue(peerSetDelta.Delta);
                break;

            case GetBlocks getBlocks:
                IEnumerable <HashDigest <SHA256> > inventories =
                    blockchain.FindNextHashes(
                        getBlocks.Locator, getBlocks.Stop, 500);

                var inv = new Inventory(inventories)
                {
                    Identity = getBlocks.Identity,
                };
                await ReplyAsync(inv, cancellationToken);

                break;

            case GetData getData:
                await TransferBlocks(
                    blockchain, getData, cancellationToken);

                break;

            default:
                Trace.Fail($"Can't handle message. [{message}]");
                break;
            }
        }
示例#20
0
        private static void Run(object obj)
        {
            while (true)
            {
                //using (var s = new PublisherSocket(">tcp://localhost:1022"))
                //{
                //    for (var i = 0; i < 1000; i++)
                //    {
                //        s.SendMoreFrame("aaa").SendFrame(Convert.ToString(DateTime.Now.Ticks));
                //    }
                //}

                queue.Enqueue(Convert.ToString(DateTime.Now.Ticks));

                Thread.Sleep(1);
            }
        }
示例#21
0
        public void StartSending(int id)
        {
            client.Options.Identity = Encoding.Unicode.GetBytes(id.ToString());
            var message = string.Format("Id = {0}", id.ToString());
            var bytes   = Encoding.ASCII.GetBytes(message);


            using (var poller = new NetMQPoller())
            {
                poller.Add(client);
                poller.Add(messageQueue);
                poller.RunAsync();

                var messageToServer = new NetMQMessage();
                messageToServer.Append(message);
                messageQueue.Enqueue(messageToServer);
            }
        }
示例#22
0
        public void WithPoller()
        {
            using (var queue = new NetMQQueue<int>())
            using (var poller = new NetMQPoller { queue })
            {
                var manualResetEvent = new ManualResetEvent(false);

                queue.ReceiveReady += (sender, args) =>
                {
                    Assert.AreEqual(1, queue.Dequeue());
                    manualResetEvent.Set();
                };

                poller.RunAsync();

                Assert.IsFalse(manualResetEvent.WaitOne(100));
                queue.Enqueue(1);
                Assert.IsTrue(manualResetEvent.WaitOne(100));
            }
        }
示例#23
0
        /// <summary>
        /// 收到客户端请求,交由Actor进行处理
        /// </summary>
        /// <param name="protocolPackage"></param>
        /// <param name="body"></param>
        public virtual void ProcessRequest(ProtocolPackage protocolPackage, byte[] body)
        {
            if (protocolPackage == null)
            {
                return;
            }

            var request = protocolPackage.UnPackToPacket(body);

            var msg = new NetMQMessage();

            msg.Append(new byte[] { 1 });           //版本号
            msg.Append("req");                      //动作
            msg.Append(protocolPackage.SessionID);  //sessionid
            msg.Append(protocolPackage.PackKeys);   //客户端密钥
            msg.Append(protocolPackage.UnPackKeys); //服务端密钥
            msg.Append(request.HeaderBytes);        //信息头
            msg.Append(request.ContentBytes);       //信息体
            //加入队列
            PushQueue.Enqueue(msg);
        }
示例#24
0
        public void WithPoller()
        {
            using (var queue = new NetMQQueue <int>())
                using (var poller = new NetMQPoller {
                    queue
                })
                {
                    var manualResetEvent = new ManualResetEvent(false);

                    queue.ReceiveReady += (sender, args) =>
                    {
                        Assert.AreEqual(1, queue.Dequeue());
                        manualResetEvent.Set();
                    };

                    poller.RunAsync();

                    Assert.IsFalse(manualResetEvent.WaitOne(100));
                    queue.Enqueue(1);
                    Assert.IsTrue(manualResetEvent.WaitOne(100));
                }
        }
示例#25
0
        public async Task ReceiveMessageAsync()
        {
            CheckEntered();

            while (true)
            {
                NetMQMessage message = await _router.ReceiveMultipartMessageAsync();

                _logger.Debug($"Message received.[f-count: {message.FrameCount}]");
                byte[] addr = message[0].ToByteArray();
                var    type = (MessageType)message[1].Buffer[0];

                switch (type)
                {
                case MessageType.Ping:
                    _logger.Debug($"Ping received.");
                    NetMQMessage reply = CreateMessage(MessageType.Pong, addr);
                    await _router.SendMultipartMessageAsync(reply);

                    break;

                case MessageType.PeerSetDelta:
                    byte[] payload = message[2].ToByteArray();
                    var(publicKey, msg) = VerifyMessage(payload);
                    using (var stream = new MemoryStream(msg))
                    {
                        var formatter = new BinaryFormatter();
                        _deltas.Enqueue((PeerSetDelta)formatter.Deserialize(stream));
                    }

                    break;

                default:
                    _logger.Warning($"Can't recognize message type[{type}]. ignored.");
                    break;
                }
            }
        }
示例#26
0
        //occurs on socket polling thread to assure sending and receiving on same thread
        private void SendQueue_ReceiveReady(object sender, NetMQQueueEventArgs <NetMQMessage> e)
        {
            NetMQMessage message;

            if (e.Queue.TryDequeue(out message, new TimeSpan(1000)))
            {
                try
                {
                    _routerSocket.SendMultipartMessage(message);
                    _logger.Info("Message sent with {0} frames.", message.FrameCount);
                }
                catch (Exception ex) //clientId not found or other error, raise event
                {
                    var unreachable = ex as HostUnreachableException;
                    _logger.Error("Error sending message to {0} with {1} frames.", new Guid(message.First.Buffer), message.FrameCount);
                    _sendFailureQueue.Enqueue(new MessageFailure
                    {
                        Message      = message.ToMessageWithClientFrame(),
                        ErrorCode    = null != unreachable ? unreachable.ErrorCode.ToString() : "Unknown",
                        ErrorMessage = ex.Message
                    });
                }
            }
        }
示例#27
0
        public void WithPoller()
        {
            using (NetMQContext context = NetMQContext.Create())
                using (NetMQQueue <int> queue = new NetMQQueue <int>(context))
                {
                    Poller poller = new Poller();
                    poller.AddSocket(queue);

                    ManualResetEvent manualResetEvent = new ManualResetEvent(false);

                    queue.ReceiveReady += (sender, args) =>
                    {
                        manualResetEvent.Set();
                    };

                    poller.PollTillCancelledNonBlocking();

                    Assert.IsFalse(manualResetEvent.WaitOne(100));
                    queue.Enqueue(1);
                    Assert.IsTrue(manualResetEvent.WaitOne(100));

                    poller.CancelAndJoin();
                }
        }
示例#28
0
        public void WithPoller()
        {
            using (NetMQContext context = NetMQContext.Create())
            using (NetMQQueue<int> queue = new NetMQQueue<int>(context))
            {
                Poller poller = new Poller();
                poller.AddSocket(queue);

                ManualResetEvent manualResetEvent = new ManualResetEvent(false);

                queue.ReceiveReady += (sender, args) =>
                {
                    manualResetEvent.Set();
                };

                poller.PollTillCancelledNonBlocking();

                Assert.IsFalse(manualResetEvent.WaitOne(100));
                queue.Enqueue(1);
                Assert.IsTrue(manualResetEvent.WaitOne(100));

                poller.CancelAndJoin();
            }
        }
示例#29
0
 protected void EnqueueMessage(NetMQMessage message)
 {
     MessageQueue.Enqueue(message);
 }
示例#30
0
        private async Task ProcessMessageAsync <T>(
            Blockchain <T> blockchain,
            Message message,
            CancellationToken cancellationToken)
            where T : IAction
        {
            switch (message)
            {
            case Ping ping:
            {
                _logger.Debug($"Ping received.");
                var reply = new Pong
                {
                    Identity = ping.Identity,
                };
                await ReplyAsync(reply, cancellationToken);

                break;
            }

            case Messages.PeerSetDelta peerSetDelta:
            {
                _deltas.Enqueue(peerSetDelta.Delta);
                break;
            }

            case GetBlockHashes getBlockHashes:
            {
                IEnumerable <HashDigest <SHA256> > hashes =
                    blockchain.FindNextHashes(
                        getBlockHashes.Locator,
                        getBlockHashes.Stop,
                        500);
                var reply = new BlockHashes(hashes)
                {
                    Identity = getBlockHashes.Identity,
                };
                await ReplyAsync(reply, cancellationToken);

                break;
            }

            case GetBlocks getBlocks:
            {
                await TransferBlocks(
                    blockchain, getBlocks, cancellationToken);

                break;
            }

            case GetTxs getTxs:
            {
                await TransferTxs(
                    blockchain, getTxs, cancellationToken);

                break;
            }

            case TxIds txIds:
            {
                await ProcessTxIds(
                    txIds, blockchain, cancellationToken);

                break;
            }

            default:
                Trace.Fail($"Can't handle message. [{message}]");
                break;
            }
        }
 protected override void HandleInvocation(IInvocation invocation) =>
 Queue.Enqueue(invocation);
 public void Enqueue(object evnt)
 {
     _queue.Enqueue(evnt);
 }
示例#33
0
        static void Main(string[] args)
        {
            var proxy1 = new Proxy(new RouterSocket("@tcp://*:5001"), new DealerSocket("@tcp://*:5002"));

            Task.Factory.StartNew(proxy1.Start);

            var dealer = new DealerSocket(">tcp://127.0.0.1:5002");
            var queue  = new NetMQQueue <NetMQMessage>();
            var poller = new NetMQPoller {
                dealer, queue
            };

            var show = false;

            dealer.ReceiveReady += (s, e) =>
            {
                var clientmessage = e.Socket.ReceiveMultipartMessage();

                Task.Factory.StartNew((o) =>
                {
                    var cmsg = (NetMQMessage)o;

                    var address = cmsg.First().ConvertToString();
                    var msg     = cmsg.Last().ConvertToString() + "-OK";

                    var servermessage = new NetMQMessage(3);
                    servermessage.Append(address);//fortest
                    servermessage.AppendEmptyFrame();
                    servermessage.Append(msg);


                    //var r = random.NextDouble();
                    //if (r > 0 && r < 0.78)
                    //{
                    //    Thread.Sleep(random.Next(1, 51));
                    //}
                    //else if (r >= 0.78 & r < 0.78 + 0.21)
                    //{
                    //    Thread.Sleep(random.Next(51, 101));
                    //}
                    //else
                    //{
                    //    Thread.Sleep(random.Next(101, 300));
                    //}

                    queue.Enqueue(servermessage);

                    //if (show)
                    //    Console.WriteLine(msg);
                }, clientmessage);

                if (show)
                {
                    Console.WriteLine(1);
                }
            };

            queue.ReceiveReady += (s, e) =>
            {
                var msg = e.Queue.Dequeue();

                dealer.SendMultipartMessage(msg);
            };

            poller.RunAsync();

            //for (var i = 0; i < 5; i++)
            //{
            //    Task.Factory.StartNew(() =>
            //    {
            //        while (true)
            //        {
            //            var servermessage = new NetMQMessage(3);
            //            servermessage.Append(Encoding.UTF8.GetBytes("dealerclient")); //for test
            //            servermessage.AppendEmptyFrame();
            //            servermessage.Append($"================={DateTime.Now.ToString()}======================");

            //            queue.Enqueue(servermessage);
            //            Thread.Sleep(1000);
            //        }
            //    });
            //}
            Console.WriteLine("Press any key to stop!");
            Console.Read();
            show = true;

            Console.Read();
            Console.Read();
            Console.Read();
        }
示例#34
0
        public void Start()
        {
            _frontend    = new RouterSocket();
            _backend     = new RouterSocket();
            _workQueue   = new NetMQQueue <Work>();
            _workerQueue = new NetMQQueue <Guid>();

            _frontend.Bind(_frontendRouterEndpoint);
            _backend.Bind(_backendRouterEndpoint);

            _poller = new NetMQPoller {
                _frontend, _backend, _workQueue, _workerQueue
            };

            _workQueue.ReceiveReady += (s, e) =>
            {
                if (_workerQueue.TryDequeue(out Guid worker, TimeSpan.FromMilliseconds(0)))
                {
                    var work = e.Queue.Dequeue();

                    work.WorkerId = worker;

                    _backend.SendMoreFrame(worker.ToByteArray())
                    .SendMoreFrameEmpty()
                    .SendFrame(work.Serialize());
                }
            };

            _workerQueue.ReceiveReady += (s, e) =>
            {
                if (_workQueue.TryDequeue(out Work work, TimeSpan.FromMilliseconds(0)))
                {
                    var worker = e.Queue.Dequeue();

                    work.WorkerId = worker;

                    _backend.SendMoreFrame(worker.ToByteArray())
                    .SendMoreFrameEmpty()
                    .SendFrame(work.Serialize());
                }
            };

            _frontend.ReceiveReady += (s, e) =>
            {
                var transportMessage = e.Socket.ReceiveMultipartMessage()
                                       .GetMessageFromRouter <Work>();

                var work = transportMessage.Message;

                work.ClientId = new Guid(transportMessage.SenderId);

                if (work.MessageType == MessageType.Ask)
                {
                    _workQueue.Enqueue(work);
                }
            };

            _backend.ReceiveReady += (s, e) =>
            {
                var transportMessage = e.Socket.ReceiveMultipartMessage()
                                       .GetMessageFromRouter <Work>();

                var work = transportMessage.Message;

                if (work.MessageType == MessageType.Ready)
                {
                    _workerQueue.Enqueue(new Guid(transportMessage.SenderId));
                }
                if (work.MessageType == MessageType.Finished)
                {
                    _frontend.SendMoreFrame(work.ClientId.ToByteArray())
                    .SendMoreFrameEmpty()
                    .SendFrame(transportMessage.MessageBytes);

                    _workerQueue.Enqueue(new Guid(transportMessage.SenderId));
                }
            };

            _poller.Run();
        }
示例#35
0
        static void Main(string[] args)
        {
            Console.WriteLine("Press any key to start!");
            Console.Read();

            NetMQPoller      Poller2 = new NetMQPoller();
            NetMQQueue <int> Queue   = new NetMQQueue <int>();
            var index  = 0;
            var client = new DealerSocket(">tcp://127.0.0.1:5001");

            prereceivecount = testcount;

            new Thread(() =>
            {
                while (true)
                {
                    Console.WriteLine($"send:{(sendcount) / 10}/s,receive:{(receivecount) / 10}/s");

                    sendcount    = 0;
                    receivecount = 0;

                    Thread.Sleep(1000 * 10);
                }
            }).Start();


            new Thread(() =>
            {
                while (true)
                {
                    if (prereceivecount >= testcount)
                    {
                        prereceivecount = 0;

                        for (var i = 0; i < testcount; i++)
                        {
                            Queue.Enqueue(++index);
                        }
                    }

                    Thread.Sleep(0);
                }
            }).Start();

            client.Options.Identity = Encoding.UTF8.GetBytes($"clientid-{Process.GetCurrentProcess().Id}");
            client.ReceiveReady    += (s, e) =>
            {
                e.Socket.ReceiveFrameBytes();
                var msg = e.Socket.ReceiveFrameString();
                //Console.WriteLine($"RECEIVE:{msg}");
                receivecount++;
                prereceivecount++;
            };
            Queue.ReceiveReady += (s, e) =>
            {
                var msg = e.Queue.Dequeue();
                client.SendMoreFrameEmpty().SendFrame($"{Encoding.UTF8.GetString(client.Options.Identity)}-{msg}");
                //Console.WriteLine($"SEND:{msg}");
                sendcount++;
            };
            Poller2.Add(Queue);
            Poller2.Add(client);
            Poller2.RunAsync();


            Console.WriteLine("Press any key to stop!");
            Console.Read();
        }