public override async Task Start(ServiceAddress serviceAddress) { _logger.LogDebug($"准备启动服务主机,监听地址:{serviceAddress}。"); 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.SoBacklog, 100) .ChildOption(ChannelOption.Allocator, PooledByteBufferAllocator.Default) .ChildHandler(new ActionChannelInitializer <ISocketChannel>(channel => { var pipeline = channel.Pipeline; pipeline.AddLast(new LengthFieldPrepender(4)); pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4)); pipeline.AddLast(new MicroMessageHandler(_codecFactory.GetDecoder())); pipeline.AddLast(new ServerHandler(_logger, async(contenxt, message) => { var sender = new DotNettyServerSender(_codecFactory.GetEncoder(), contenxt); await OnReceived(sender, message); })); })); var endPoint = serviceAddress.ToEndPoint(); _channel = await bootstrap.BindAsync(endPoint); _logger.LogInformation($"服务主机启动成功,监听地址:{serviceAddress}。"); }
public override async Task Start(ServiceAddress serviceAddress) { _logger.LogDebug($"准备启动服务主机,监听地址:{serviceAddress}。"); var bossGroup = new MultithreadEventLoopGroup(1); var workerGroup = new MultithreadEventLoopGroup(); var bootstrap = new ServerBootstrap(); bootstrap .Channel <TcpServerSocketChannel>() .Option(ChannelOption.SoBacklog, 8192) .ChildOption(ChannelOption.Allocator, PooledByteBufferAllocator.Default) .Group(bossGroup, workerGroup) .ChildHandler(new ActionChannelInitializer <ISocketChannel>(channel => { var pipeline = channel.Pipeline; pipeline.AddLast(new LengthFieldPrepender(4)); pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4)); pipeline.AddLast(new MicroMessageHandler <InvokeMessage>(_messageCodec, serviceAddress.Gzip)); pipeline.AddLast(new ServerHandler(async(contenxt, message) => { var sender = new DotNettyServerSender(_messageCodec, contenxt, serviceAddress); await OnReceived(sender, message); }, _loggerFactory)); })); try { var endPoint = serviceAddress.ToEndPoint(); _channel = await bootstrap.BindAsync(endPoint); _logger.LogInformation($"服务主机启动成功,监听地址:{serviceAddress}。"); } catch (Exception ex) { _logger.LogError(ex, $"服务主机启动失败,监听地址:{serviceAddress}。 "); } }