예제 #1
0
 public SocketRemotingClient(string name, IPEndPoint serverEndPoint, ISocketClientEventListener eventListener = null)
 {
     _sync               = new object();
     _serverEndPoint     = serverEndPoint;
     _eventListener      = eventListener;
     _tcpClient          = new TcpSocketClient(serverEndPoint, ReceiveReplyMessage, this);
     _responseFutureDict = new ConcurrentDictionary <long, ResponseFuture>();
     _replyMessageQueue  = new BlockingCollection <byte[]>(new ConcurrentQueue <byte[]>());
     _scheduleService    = ObjectContainer.Resolve <IScheduleService>();
     _worker             = new Worker("SocketRemotingClient.HandleReplyMessage", HandleReplyMessage);
     _logger             = ObjectContainer.Resolve <ILoggerFactory>().Create(GetType().FullName);
 }
예제 #2
0
        static void Main(string[] args)
        {
            Configuration
            .Create()
            .UseAutofac()
            .RegisterCommonComponents()
            .UseLog4Net();

            var totalHandled   = 0;
            var watch          = default(Stopwatch);
            var serverEndPoint = new IPEndPoint(SocketUtils.GetLocalIPV4(), 5000);
            var clientCount    = 4;
            var clients        = new List <TcpSocketClient>();
            var messageSize    = 1024 * 1;
            var messageCount   = 250000;
            var message        = new byte[messageSize];

            for (var index = 0; index < clientCount; index++)
            {
                var client = new TcpSocketClient(serverEndPoint, reply =>
                {
                    var local = Interlocked.Increment(ref totalHandled);
                    if (local == 1)
                    {
                        watch = Stopwatch.StartNew();
                    }
                    if (local % 10000 == 0)
                    {
                        Console.WriteLine("received reply message, size:" + reply.Length + ", count:" + local + ", timeSpent:" + watch.ElapsedMilliseconds + "ms");
                    }
                });
                client.Start();
                clients.Add(client);
            }

            var actions = new List <Action>();

            foreach (var client in clients)
            {
                actions.Add(() =>
                {
                    for (var index = 0; index < messageCount; index++)
                    {
                        client.SendMessage(message);
                    }
                });
            }

            Parallel.Invoke(actions.ToArray());

            Console.ReadLine();
        }
예제 #3
0
 public SocketRemotingClient(IPEndPoint serverEndPoint, RemotingClientSetting setting = null, ISocketClientEventListener eventListener = null)
 {
     _sync = new object();
     _serverEndPoint = serverEndPoint;
     _eventListener = eventListener;
     _setting = setting ?? new RemotingClientSetting();
     _tcpClient = new TcpSocketClient(_setting.LocalEndPoint, serverEndPoint, ReceiveReplyMessage, this);
     _responseFutureDict = new ConcurrentDictionary<long, ResponseFuture>();
     _replyMessageQueue = new BlockingCollection<byte[]>(new ConcurrentQueue<byte[]>());
     _scheduleService = ObjectContainer.Resolve<IScheduleService>();
     _worker = new Worker("SocketRemotingClient.HandleReplyMessage", HandleReplyMessage);
     _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().FullName);
 }