Multithreading netty EventExecutor组线程重复执行

Multithreading netty EventExecutor组线程重复执行,multithreading,netty,Multithreading,Netty,最近,我使用netty构建了一个服务器程序,但遇到了一个难题, 有时,当我的程序收到一个连接时,它会使用多个线程来处理同一个连接 例如,当客户端连接到服务器时,客户端给服务器端数据A,然后将有多个不同的线程接收数据A并对其进行处理,这使得我的数据库经常插入相同的数据 我怎样才能解决这个问题 我的代码: private int port; private Conf MyConf; public static String Path; public ChiconyServerBootstrap(S

最近,我使用netty构建了一个服务器程序,但遇到了一个难题, 有时,当我的程序收到一个连接时,它会使用多个线程来处理同一个连接

例如,当客户端连接到服务器时,客户端给服务器端数据A,然后将有多个不同的线程接收数据A并对其进行处理,这使得我的数据库经常插入相同的数据

我怎样才能解决这个问题

我的代码:

private int port;
private Conf MyConf;
public static String Path;

public ChiconyServerBootstrap(String Path)
{

    try
    {
        MyConf = new Conf(Path);
        port = MyConf.getPort();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

public void start()
{
    ServerBootstrap serverbootstrap = new ServerBootstrap();
    NioEventLoopGroup connect_group = new NioEventLoopGroup();
    NioEventLoopGroup io_group = new NioEventLoopGroup();
    final EventExecutorGroup work_group = new DefaultEventExecutorGroup(10);

    try
    {
        serverbootstrap.group(connect_group, io_group);
        serverbootstrap.channel(NioServerSocketChannel.class);
        serverbootstrap.childHandler(new ChannelInitializer<SocketChannel>()
        {
            @Override
            public void initChannel(SocketChannel ch) throws Exception
            {
                ch.pipeline().addLast(new ByteArrayDecoder());
                ch.pipeline().addLast(work_group, new WorkHandler());
            }
        });

        serverbootstrap.childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60);
        serverbootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
        ChannelFuture future = serverbootstrap.bind(new InetSocketAddress(port)).sync();
        future.channel().closeFuture().sync();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        connect_group.shutdownGracefully();
        io_group.shutdownGracefully();
        work_group.shutdownGracefully();
    }
}

public static void main(String[] args)
{
    ChiconyServerBootstrap server;  
    Path = "./Conf/config.properties";
    server = new ChiconyServerBootstrap(Path);
    server.start();
}

Netty设计用于多线程,这也是从NIO环境中获得最大性能所必需的,因为从其他方面来说,大多数核心线程都不做任何事情。您可以使用
新的NioEventLoopGroup(1)使其成为单线程构造函数然而,请展示您的“完整”WorkHandlerNetty设计用于多线程,这也是从NIO环境中获得最大性能所必需的,因为其他大多数内核线程什么都不做。您可以使用
新的NioEventLoopGroup(1)使其成为单线程构造函数但是请显示您的“完整”工作处理程序
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception
{       
    //Initialization parameter
}

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
{
    //Accept the parameters from the client
}

@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception
{       
    //Perform business logic, data insert into database
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) 
{   

}