public async Task StartAsync(EndPoint endPoint) { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug($"准备启动服务主机,监听地址:{endPoint}。"); } var serverCompletion = new TaskCompletionSource(); var bossGroup = new MultithreadEventLoopGroup(1); var workerGroup = new MultithreadEventLoopGroup();//Default eventLoopCount is Environment.ProcessorCount * 2 var bootstrap = new ServerBootstrap(); bootstrap .Group(bossGroup, workerGroup) .Channel <TcpServerSocketChannel>() .Option(ChannelOption.SoReuseport, true) .ChildOption(ChannelOption.SoReuseaddr, true) .Option(ChannelOption.SoBacklog, AppConfig.ServerOptions.SoBacklog) .ChildHandler(new ActionChannelInitializer <IChannel>(channel => { IChannelPipeline pipeline = channel.Pipeline; pipeline.AddLast("encoder", new HttpResponseEncoder()); pipeline.AddLast(new HttpRequestDecoder(int.MaxValue, 8192, 8192, true)); pipeline.AddLast(new HttpObjectAggregator(int.MaxValue)); pipeline.AddLast(new ServerHandler(async(contenxt, message) => { var sender = new DotNettyHttpServerMessageSender(_transportMessageEncoder, contenxt, _serializer); await OnReceived(sender, message); }, _logger, _serializer, _serviceRouteProvider)); serverCompletion.TryComplete(); })); try { _channel = await bootstrap.BindAsync(endPoint); if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug($"Http服务主机启动成功,监听地址:{endPoint}。"); } } catch { _logger.LogError($"Http服务主机启动失败,监听地址:{endPoint}。 "); } }
protected FuncQueueNodeBase(TaskCompletionSource <T> promise, CancellationToken cancellationToken) { this.promise = promise; this.cancellationToken = cancellationToken; }