Ejemplo n.º 1
0
        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}。");
        }
Ejemplo n.º 2
0
        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}。 ");
            }
        }