,이 방법의 끝에이 같은 코드가하는 bind
방법이있다 self._handle_events
, 바로 전화 하시겠습니까?토네이도 HTTP 서버의 바인드 방법
그러나 모든 클라이언트는 새로운 파일 설명자를 생성합니다. 맞습니까?
그래서 ioloop 모니터 클라이언트의 소켓은 sock.fileno()
을 통해 연결 되나요? 난 그냥 소스에서 잠깐 살펴했다
,이 방법의 끝에이 같은 코드가하는 bind
방법이있다 self._handle_events
, 바로 전화 하시겠습니까?토네이도 HTTP 서버의 바인드 방법
그러나 모든 클라이언트는 새로운 파일 설명자를 생성합니다. 맞습니까?
그래서 ioloop 모니터 클라이언트의 소켓은 sock.fileno()
을 통해 연결 되나요? 난 그냥 소스에서 잠깐 살펴했다
(HttpServer에의 바인드 방법은 한 번만 호출), 다음과 같이 작동하는 것 같다 :
토네이도가 소켓 자체를 모니터링하지 않습니다, 그것은 운영에이 작업을 전달 시스템, epoll
(Linux) 또는 select
을 사용하십시오. self.io_loop.add_handler
을 호출하면 새 연결을 사용할 수있을 때만 콜백이 추가됩니다.
클라이언트 연결은 self._handle_events
으로 설정되며 소켓으로 수신되는 각각의 새 연결에 대해 새 HTTPConnection
이 생성됩니다. 각 HTTPConnection
에서 사용하는 통신 소켓은 sock.accept()
을 호출하여 만든 새 소켓입니다. 서버는 이전과 동일한 소켓에서 연결을 계속 허용합니다. 요약 그래서
: 새로운 연결이 소켓에 감지되면
이self._handle_events
를 호출합니다.HTTPConnection
개체가 각 클라이언트에 대해 생성되며 통신을위한 별도의 소켓이 있습니다.epoll
또는 select
을 사용하여 운영 체제로 전달합니다. 클라이언트와의 실제 통신은 HTTPConnection
개체에 의해 수행됩니다.내가 이해해야 할 핵심 사항은 여기의 소켓이 새로운 연결을 수락하는 데 사용된다는 것입니다. sock.accept()
을 사용하여 연결을 수락하면 통신을위한 새 소켓이 반환되고이 소켓은 HTTPConnection
개체에 연결됩니다.