public void WorkerEngine_Multiple_Parallel_WebPages() { Parallel.For(0, 5, i => { using (var workerEngine = new WorkerEngine(new Size(1366, 768), new WindowLoadTrigger(), new VisibleScreen(), _testedPool)) { var image = workerEngine.CaptureUrl("https://google.com"); TestUtils.SaveBitmap(image, nameof(WorkerEngineTests), nameof(WorkerEngine_Multiple_Parallel_WebPages) + "Parrallel" + i); } }); }
public void WorkerEngine_Multiple_Sequential_WebPages() { for (int i = 0; i < 5; i++) { using (var workerEngine = new WorkerEngine(new Size(1366, 768), new WindowLoadTrigger(), new VisibleScreen(), _testedPool)) { var image = workerEngine.CaptureUrl("https://google.com"); TestUtils.SaveBitmap(image, nameof(WorkerEngineTests), nameof(WorkerEngine_Multiple_Sequential_WebPages) + "Sequential" + i); } } }
public async Task RunEngineAsync(int port, IBasicHandler basicHandler, ICustomizeHandler handler) { bossGroup = new MultithreadEventLoopGroup(1); workerGroup = new MultithreadEventLoopGroup(); MessageDispatcher dispatcher = new MessageDispatcher(this.BasicController, basicHandler, handler); List <ChannelServerHandler> handlers = new List <ChannelServerHandler>(); RingObject <ChannelServerHandler> ringHandlers = null; if (!useDefaultThread)//此处相比默认handler增加了工作线程,默认工作线程为cpu核心*2 { for (int i = 0; i < workThreadCount; i++) { WorkerEngine <RequestInfo> workerEngine = new WorkerEngine <RequestInfo>(3000, 1, dispatcher.Process); workerEngine.Start(); handlers.Add(new ChannelServerHandler(this.userManager, workerEngine)); } ringHandlers = new RingObject <ChannelServerHandler>(handlers); } else { var cChannelHandlers = new List <ChannelServerHandler>() { new ChannelServerHandler(this.userManager, dispatcher) }; ringHandlers = new RingObject <ChannelServerHandler>(cChannelHandlers); } var bootstrap = new ServerBootstrap(); bootstrap .Group(bossGroup, workerGroup) .Channel <TcpServerSocketChannel>() //.Option(ChannelOption.SoBacklog, 100) //.Handler(new LoggingHandler(LogLevel.INFO)) .ChildHandler(new ActionChannelInitializer <ISocketChannel>(channel => { IChannelPipeline pipeline = channel.Pipeline; pipeline.AddLast(OFrameDecoder.NewOFrameDecoder()); pipeline.AddLast(ringHandlers.GetNext()); })); IChannel bootstrapChannel = await bootstrap.BindAsync(port); }
public ChannelServerHandler(UserManager userManager, WorkerEngine <RequestInfo> workerEngine) { this.UserManager = userManager; this.workerEngine = workerEngine; }