>

Netty를 사용하여 실시간 게임을 만들고 있는데 ChannelHandlerContext 에서 write 메소드를 사용하는 것에 대한 질문이 있습니다.   ChannelHandler 와 다른 스레드에서  에 있습니다.

데이터베이스에서 가져 와서 게임 로직을 수행 할 Java 애플리케이션에 별도의 스레드 풀이 있습니다. BlockingQueue 를 사용하고 싶습니다  다른 스레드에 요청을 제출하여 ChannelHandlerContext 전달  그리고 플레이어가 보낸 데이터. 그런 다음 스레드는이를 기반으로 게임 상태를 변경합니다. 그 후에 ChannelHandlerContext 를 사용하여 게임 상태가 변경된 사용자에게 응답을 다시 쓸 수 있기를 원합니다.  쓰기 방법.

별도의 게임 로직 스레드에서이 작업을 수행하면 쓰레드에 부담을주는 쓰기 기능을 원하지 않습니다. 거기에서 write를 호출하면 자체 스레드가 생성되거나 게임 로직 스레드 또는 ChannelHandler's 가 사용됩니까?  스레드?


  • 답변 # 1

    이 경우 ChannelHandler  실이 사용됩니다. ChannelHandlerContext.write 때문입니다  메소드는 어떤 스레드에 있는지 확인합니다. 그리고 ctx.write  메소드는 ctx.write 보다 외부 스레드 (이벤트 실행 스레드가 아님)에서 호출됩니다.  작업이 컨텍스트에 속하는 스레드로 제출됩니다.

    실제로 일어나는 일은 다음과 같이 간단히 설명 할 수 있습니다 :

    gameLogicPool.send(new Runnable() {
             //your logic here
             ctx.write(response);
             //ctx.write actually does this when executed from another thread:
             ctx.executor().execute(new Runnable() {
                 //write happens here when you are in event executor already
                 }
             );
        }
    );
    
    

  • 이전 python - 시퀀스를 쌍 조합으로 나누기
  • 다음 angular - ng2-ckeditor로 추가 플러그인을 추가하는 방법은 무엇입니까?