2014-01-09 5 views
0

저는 파이썬을 처음 접했고 온라인 보안 과정을 일부 밟고 있습니다. 나는 클래스의 전체적인 개념이 아직 명확하지 않다는 것을 인정해야한다. 그래서 이것이 내가 그 개념을 완전히 이해하지 못하는 이유 일 것이다. python.org 사이트에서 그들은 다음과 같이 말합니다 :Python SocketServer - BaseRequestHandler를 서브 클래 싱하는 목적

서버를 생성하려면 몇 단계가 필요합니다. 먼저 BaseRequestHandler 클래스를 하위 클래스 화하고 handle() 메서드를 재정 의하여 요청 처리기 클래스를 만들어야합니다. 이 방법은 들어오는 요청을 처리합니다. 둘째, 서버 클래스 중 하나 인 을 인스턴스화하여 서버의 주소와 요청 처리기 클래스를 전달해야합니다.

누군가가 더 잘 설명 할 수 있습니까? 왜 하위 클래스를 만들어야합니까? 이론적 인 관점에서 수업을 사용하는 힘을 이해할 수 있습니다. 아직 테스트 스크립트에서 사용하지 않았기 때문에 "아하"순간을 얻을 수 있습니다.

#!/usr/bin/python 
import SocketServer 

class EchoHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
     print "Got Connection from : ", self.client_address 
     data = 'dummy' 

     while len(data): 
      data = self.request.recv(1024) 
      print "Client sent: " + data 
      self.request.send(data) 
     print "client left" 

serverAddr = ("0.0.0.0", 9000) 

server = SocketServer.TCPServer(serverAddr, EchoHandler) 
server.serve_forever() 
+0

이것은 사과에 사과가 아닐 수도 있지만 개념적으로 이것은 스레딩 가져 오기 스레드 대 수입 스레드 대 쓰는 것과 비슷합니다. 필자가이 글을 쓰면서 비유가 원격으로도 비슷하다고 확신하지는 않지만 SocketServer.BaseRequestHandler는 서브 클래스 섹션에서 호출 할 수있는 프레임 워크의 한 형태인가? – user2565554

답변

1

SocketServer.BaseRequestHandler은 후드 아래 처리를 처리하는 템플릿입니다 : 여기에 내가 복용하고있는 과정에서 스크립트입니다. 그러나 실제로 요청을 처리하지는 않습니다.

서브 클래 싱을 사용하면 구현에 고유 한 부분 만 추가하고 기본의 모든 기능을 유지하면서 해당 템플릿을 기반으로 빌드 할 수 있습니다. def handle(self)을 정의하고 필요한 데이터의 특정 처리를 수행하십시오.

1

BaseRequestHandler은 서버 요청을 처리합니다. 이 클래스에 대한 액세스 권한을 얻으려면 서버에서 요청을 처리하기 위해 액세스해야하는 BaseRequestHandler의 다양한 메소드에 액세스 할 수있는 하위 클래스를 만들어야합니다. BaseRequestHandler 클래스 from the source 한 번 봐, 핸들 방법은 단지 (아무것도하지 않는 때문에 등)는 의미로 pass을 가지고 있습니다 :

class BaseRequestHandler: 

    """Base class for request handler classes. 

    This class is instantiated for each request to be handled. The 
    constructor sets the instance variables request, client_address 
    and server, and then calls the handle() method. To implement a 
    specific service, all you need to do is to derive a class which 
    defines a handle() method. 

    The handle() method can find the request as self.request, the 
    client address as self.client_address, and the server (in case it 
    needs access to per-server information) as self.server. Since a 
    separate instance is created for each request, the handle() method 
    can define arbitrary other instance variariables. 

    """ 

    ... 

    def handle(self): 
     pass 

    ... 

귀하의 코드가 뭔가를 그 handle 방법을 만들 필요가 있으며, 당신은 BaseRequestHandler의 서브 클래스를 생성함으로써 그렇게한다.

관련 문제