ProgramQps.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System;
  2. using System.Threading;
  3. using CLClient.Statistics;
  4. using Sers.Core.CL.CommunicationManage;
  5. using Vit.Core.Module.Log;
  6. using Vit.Core.Util.Pipelines;
  7. using Vit.Core.Util.Threading;
  8. namespace CLClient
  9. {
  10. class ProgramQps
  11. {
  12. static StatisticsQpsInfo qpsInfo = new StatisticsQpsInfo();
  13. static void Main(string[] args)
  14. {
  15. Logger.OnLog = (level, msg) => { Console.Write("[" + level + "]" + msg); };
  16. qpsInfo.Start("Msg");
  17. for (int i = Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath<int>("PressureTest.clientCount"); i >0; i--)
  18. {
  19. StartThreadSendMessage();
  20. }
  21. while (true)
  22. {
  23. Thread.Sleep(5000);
  24. }
  25. }
  26. static void StartThreadSendMessage()
  27. {
  28. CommunicationManageClient cm = new CommunicationManageClient();
  29. cm.Conn_OnDisconnected = (conn) =>
  30. {
  31. Logger.Info("Conn_OnDisconnected");
  32. Sers.Core.Module.App.SersApplication.OnStop();
  33. };
  34. cm.conn_OnGetRequest = (conn,sender,request,callback)=>
  35. {
  36. qpsInfo.IncrementRequest();
  37. callback(sender,new Vit.Core.Util.Pipelines.ByteData (request));
  38. };
  39. cm.conn_OnGetMessage = (conn,msg) =>
  40. {
  41. qpsInfo.IncrementRequest();
  42. cm.SendMessageAsync(new Vit.Core.Util.Pipelines.ByteData (msg));
  43. };
  44. if (!cm.Start())
  45. {
  46. return;
  47. }
  48. byte[] buff = new byte[Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath<int>("PressureTest.msgLen")];
  49. for (int i = Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath<int>("PressureTest.messageThreadCount"); i > 0; i--)
  50. {
  51. cm.SendMessageAsync(new ByteData(buff));
  52. }
  53. int theadCount = Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath<int>("PressureTest.requestThreadCount");
  54. if (theadCount >= 0)
  55. {
  56. ///*/
  57. var conn = cm.organizeList[0].conn;
  58. Action<object, ByteData> callback = null;
  59. callback = (sender, data) =>
  60. {
  61. qpsInfo.IncrementRequest();
  62. conn.SendRequestAsync(null, data, callback);
  63. };
  64. for (int t = theadCount; t > 0; t--)
  65. {
  66. callback(null, new ByteData(buff));
  67. }
  68. /*/
  69. LongTaskHelp task = new LongTaskHelp();
  70. task.threadName = "PressureTest.SendRequest";
  71. task.threadCount = theadCount;
  72. task.action = () =>
  73. {
  74. var conn = cm.organizeList[0].conn;
  75. for (; ; )
  76. {
  77. if (conn.SendRequest(new ByteData(buff), out _))
  78. qpsInfo.IncrementRequest();
  79. }
  80. };
  81. task.Start();
  82. //*/
  83. }
  84. }
  85. }
  86. }