Twisted를 사용하여 TCP Server와 Client를 한번에
- 카테고리 없음
- 2008. 9. 19.
Twisted에서 제공하는 TAC를 사용하면, 여러개의 서비스를 동시에 묶어 application service로 등록 사용할 수 있다.
앞서 만들었던 TestClient에 추가적으로 Server의 요소를 넣고자 한다.
예를 들면, Administrator의 목적으로.
이를 위해, 몇몇 패키지를 import 한다.
추가적으로 서버의 프로토콜과 팩토리를 정의한다.
Service로 등록하기 위해,
service.Service를 상속받아 각각 ServerFactory와 ClientFactory를 리턴하도록 구현한다.
애플리케이션 서버로 묶어 주기 위해, 다음과 같이 등록한다.
이와 같이 작성한 파이썬 파일을 tac 파일로 변경하면, twisted application으로 실행할 수 있게 되는데, 이대 twistd 명령어로 실행시켜야 한다.
twistd -ny finger.tac #just like before
twisted -y finger.tac # daemonize, keep pid in twistd.pid
앞서 만들었던 TestClient에 추가적으로 Server의 요소를 넣고자 한다.
예를 들면, Administrator의 목적으로.
이를 위해, 몇몇 패키지를 import 한다.
from twisted.internet.protocol import ServerFactory from twisted.application import internet, service |
추가적으로 서버의 프로토콜과 팩토리를 정의한다.
class AdminProtocol(LineReceiver): delimiter = '\n'; def lineReceived(self, line): print line def connectionMade(self): print '$NEW CLIENT : %d clients are connected' % self.factory.numProtocols if self.factory.numProtocols > 100: self.transport.write("Too many connections, try later") self.transport.loseConnection() def connectionLost(self, reason): self.factory.numProtocols = self.factory.numProtocols - 1 print '$CONNECTION LOST : %d clients are remained' % self.factory.numProtocols def startedConnecting(self, connector): print '$started connecting..' class AdminFactory(ServerFactory): protocol = AdminProtocol numProtocols = 0 ID = 0 def __init__(self): print 'initialized' |
Service로 등록하기 위해,
service.Service를 상속받아 각각 ServerFactory와 ClientFactory를 리턴하도록 구현한다.
class AdminService(service.Service): def getTestFactory(self): f = TestFactory() f.protocol = TestClient return f def getAdminFactory(self): f = AdminFactory() f.protocol = AdminProtocol return f |
애플리케이션 서버로 묶어 주기 위해, 다음과 같이 등록한다.
application = service.Application('test', uid=1, gid=1) f = AdminService() serviceCollection = service.IServiceCollection(application) internet.TCPServer(8002, f.getAdminFactory()).setServiceParent(serviceCollection) internet.TCPClient('localhost', 8001, f.getTestFactory()).setServiceParent(serviceCollection) |
이와 같이 작성한 파이썬 파일을 tac 파일로 변경하면, twisted application으로 실행할 수 있게 되는데, 이대 twistd 명령어로 실행시켜야 한다.
twistd -ny finger.tac #just like before
twisted -y finger.tac # daemonize, keep pid in twistd.pid