public Server(IClientService clientService, IMessageProtocolProcessor protocolProcessor, IClientsPool clientsPool, ISettings settings) { _clientService = clientService; _messageProtocolProcessor = protocolProcessor; _clientsPool = clientsPool; _settings = settings; }
private void spawnThreads(IClientsPool <string> pool, int count) { for (var i = 0; i < count; i++) { newThread(pool).Start(); } logClientsCount(); }
private Thread newThread(IClientsPool <string> pool) { Thread t = null; t = new Thread(_ => { Thread.CurrentThread.Priority = ThreadPriority.BelowNormal; var hitCounter = 0; var client = pool.GetClient(); var rand = new Random(); while (hitCounter < ClientLifetime) { Thread.Sleep(HitDelay); // simulate idle clients if (rand.NextDouble() < IdleClientProb) { Thread.Sleep(IdleClientTime); continue; } // simulate dying clients if (rand.NextDouble() < DyingSimProb) { break; } var key = getRandomKey(); var value = getRandomValue(); try { client.Set(key, value); Trace.Assert(client.Get(key) == value); client.Del(key); } catch (Exception ex) { logException(ex); } hitCounter++; } // self-restart; _threads.Remove(t.ManagedThreadId); newThread(pool).Start(); }); _threads.Add(t.ManagedThreadId, t); return(t); }
private IEnumerable <double> pingThread(IClientsPool <string> pool) { while (true) { double result; try { var client = pool.GetClient(); var startTime = DateTime.Now; Trace.Assert(client.Ping()); var endTime = DateTime.Now; result = (endTime - startTime).TotalMilliseconds; } catch (Exception ex) { logException(ex); result = 0.0; } yield return(result); } }
public void Run() { // configure benchmark parameters here: const int Instances = 7; const int Iterations = 10000; const bool QuietMode = false; // turn to false to make it wait for key inputs Func<Job> getJob = () => new PingJob(); _settings = RedisSettings.Build() .ReconnectOnIdle(false); _pool = new RoundRobinPool<string>(_settings, Instances); do { // setup var options = TaskCreationOptions.LongRunning; var tasks = Enumerable .Range(0, Instances) .Select(n => getJob()) .Select(job => new Task<BenchmarkResult>( () => benchMark(job, Iterations), options)) .ToArray(); if (!QuietMode) { Console.WriteLine("{0} instances of `{1}` each doing {2} iterations.", tasks.Count(), getJob().Description, Iterations); Console.WriteLine("Hit any key to start."); Console.ReadKey(); } // starting if (Instances == 1) tasks.First().RunSynchronously(); else Array.ForEach(tasks, t => t.Start()); Task.WaitAll(tasks); // report time taken if (!QuietMode) { Console.WriteLine("All done."); var results = tasks.Select(t => t.Result); foreach (var result in results) { Console.WriteLine("{0} : {1}ms", result.Job.Description, result.MillisecondsTaken); } var avg = results.Average(r => r.MillisecondsTaken); var max = results.Max(r => r.MillisecondsTaken); var min = results.Min(r => r.MillisecondsTaken); Console.WriteLine("Maximum : {0}ms", max); Console.WriteLine("Minimum : {0}ms", min); Console.WriteLine("Average : {0}ms", avg); Console.ReadKey(); } } while (!QuietMode); // don't repeat in quietmode }
private void spawnThreads(IClientsPool<string> pool, int count) { for (var i = 0; i < count; i++) newThread(pool).Start(); logClientsCount(); }
public void Run() { // configure benchmark parameters here: const int Instances = 7; const int Iterations = 10000; const bool QuietMode = false; // turn to false to make it wait for key inputs Func <Job> getJob = () => new PingJob(); _settings = RedisSettings.Build() .ReconnectOnIdle(false); _pool = new RoundRobinPool <string>(_settings, Instances); do { // setup var options = TaskCreationOptions.LongRunning; var tasks = Enumerable .Range(0, Instances) .Select(n => getJob()) .Select(job => new Task <BenchmarkResult>( () => benchMark(job, Iterations), options)) .ToArray(); if (!QuietMode) { Console.WriteLine("{0} instances of `{1}` each doing {2} iterations.", tasks.Count(), getJob().Description, Iterations); Console.WriteLine("Hit any key to start."); Console.ReadKey(); } // starting if (Instances == 1) { tasks.First().RunSynchronously(); } else { Array.ForEach(tasks, t => t.Start()); } Task.WaitAll(tasks); // report time taken if (!QuietMode) { Console.WriteLine("All done."); var results = tasks.Select(t => t.Result); foreach (var result in results) { Console.WriteLine("{0} : {1}ms", result.Job.Description, result.MillisecondsTaken); } var avg = results.Average(r => r.MillisecondsTaken); var max = results.Max(r => r.MillisecondsTaken); var min = results.Min(r => r.MillisecondsTaken); Console.WriteLine("Maximum : {0}ms", max); Console.WriteLine("Minimum : {0}ms", min); Console.WriteLine("Average : {0}ms", avg); Console.ReadKey(); } } while (!QuietMode); // don't repeat in quietmode }
private IEnumerable<double> pingThread(IClientsPool<string> pool) { while (true) { double result; try { var client = pool.GetClient(); var startTime = DateTime.Now; Trace.Assert(client.Ping()); var endTime = DateTime.Now; result = (endTime - startTime).TotalMilliseconds; } catch (Exception ex) { logException(ex); result = 0.0; } yield return result; } }
private Thread newThread(IClientsPool<string> pool) { Thread t = null; t = new Thread(_ => { Thread.CurrentThread.Priority = ThreadPriority.BelowNormal; var hitCounter = 0; var client = pool.GetClient(); var rand = new Random(); while (hitCounter < ClientLifetime) { Thread.Sleep(HitDelay); // simulate idle clients if (rand.NextDouble() < IdleClientProb) { Thread.Sleep(IdleClientTime); continue; } // simulate dying clients if (rand.NextDouble() < DyingSimProb) break; var key = getRandomKey(); var value = getRandomValue(); try { client.Set(key, value); Trace.Assert(client.Get(key) == value); client.Del(key); } catch (Exception ex) { logException(ex); } hitCounter++; } // self-restart; _threads.Remove(t.ManagedThreadId); newThread(pool).Start(); }); _threads.Add(t.ManagedThreadId, t); return t; }
public RedisSessionStore(IClientsPool clientsPool) { _pool = clientsPool; }
public MeseClientService(IClientsPool clientsPool) { _clientsPool = clientsPool; }
public MeseMessageProtocolProcessorDecorator(IMessageProtocolProcessor innerProcessor, IClientsPool clientsPool) { _innerProcessor = innerProcessor; _clientsPool = clientsPool; }