2016-08-29 6 views
0

동일한 포트에서 다중 소켓 연결을 허용하는 Netty를 사용하여 서버 어플리케이션을 작성해야합니다. 즉, 여러 개의 ServerBootStrap 객체를 동일한 포트에 바인딩 할 수 있어야합니다. Netty를 사용하면 가능합니까? 내 코드는 다음과 같습니다 : 사용Netty를 사용하여 두 핸들러를 동일한 포트에 바인드 할 수 있습니까?

+1

아니오. 어쨌든 왜 그걸 원하니? 당신의 봉사 목적은 무엇입니까? –

+0

동의합니다. 그리고 나는 이것이 "네티"문제가 아니라고 생각합니다. –

+1

동일한 포트에 두 번 이상 바인드 할 수 없습니다. [포트 통합 예제] (https://github.com/netty/netty/tree/4.0/example/src/main/java/io/netty/example/portunification)가 도움이 될 것입니다. –

답변

0

그것은 가능하다 이미 주소를, 그러나 당신의 기본 OS에 따라 달라집니다

@Override 
public void startServer() { 
bossGroup = new NioEventLoopGroup(1); 
workerGroup = new NioEventLoopGroup(); 
try { 
    ServerBootstrap b = new ServerBootstrap(); 
    b.group(bossGroup, workerGroup) 
     .channel(NioServerSocketChannel.class) 
     .option(ChannelOption.SO_REUSEADDR,true) 
     .option(ChannelOption.SO_BACKLOG, 1) 
     .option(ChannelOption.SO_KEEPALIVE, true) 
     .option(ChannelOption.AUTO_CLOSE, false) 
     .option(ChannelOption.TCP_NODELAY, true) 
     .handler(new LoggingHandler(LogLevel.INFO)) 
     .childHandler(new ChannelInitializer<SocketChannel>() { 
     @Override 
     public void initChannel(SocketChannel ch) 
      throws Exception { 
      ChannelPipeline p = ch.pipeline(); 
      p.addLast(new TWebMessageDecoder(logger)); 
      p.addLast(new StringDecoder(CharsetUtil.UTF_8)); 
      p.addLast(serverHandler); 
     } 
     }); 

    ChannelFuture f = b.bind(Utils.getPort(getConntype(), config)) 
     .sync(); 
    f.channel().closeFuture().sync(); 
} catch (Exception e) { 
... 
} finally { 
... 
} 
} 

나는 예외를 얻고있다. 귀하의 질문에 대답하려면 실제로 옵션 SO_REUSEADDR가 무엇을 이해할 필요하고 누군가가 이미 여기 설명하는 훌륭한 일을했다 :, 이럴 수는 없습니다

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

관련 문제