뒤틀린 상태에서 어떻게 '연결 관리'를 특정 연기를 발사 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/570397

문제

이것은 더 큰 프로그램의 일부입니다. 관련 부분 만 설명하겠습니다. 기본적으로 내 코드는 원격 호스트에 대한 새로운 연결을 생성하려고합니다. 연결이 설정되면 연기 된 연기를 반환해야하므로 무언가를 보낼 수 있습니다.

나는 연결을 만들고있다 twisted.internet.interfaces.IReactorSSL.connectSSL. 그 전화 buildProtocolClientFactory 새로운 연결을 얻는 인스턴스 (twisted.internet.protocol.Protocol) 개체 및 반환 a twisted.internet.interfaces.IConnector. 연결이 시작되면 트위스트 호출 startedConnecting 공장에서 IConnector. 실제로 연결이 이루어지면 프로토콜의 connectionMade 콜백은 논쟁없이 호출됩니다.

이제 호스트/포트 당 하나의 연결 만 필요하면 나머지는 쉽습니다. 전화하기 전에 connectSSL, 나는 연기를 만들어서 (호스트, 포트)에 키가 든 사전에 넣었습니다. 그런 다음 프로토콜 연결에서 사용할 수 있습니다. self.transport.getPeer() 호스트/포트를 검색하려면이를 사용하여 연기를 찾아 콜백을 발사하십시오. 그러나 둘 이상의 연결을 만들고 싶다면 이것은 분명히 분명합니다.

문제는 전화하기 전에 내가 만든 연기를 연관시키는 다른 방법을 볼 수 없다는 것입니다. connectSSL 이랑 connectionMade 나중에.

도움이 되었습니까?

해결책

이것을 더 살펴보면, 나는 더 나은 방법이 있기를 바랍니다. 이것은 이상해 보입니다.

Twisted에는 수업이 있습니다. ClientCreator 간단한 단일 사용 연결을 생성하는 데 사용됩니다. 이론적으로는 내가 원하는 것을 수행합니다. 연결하고 반환합니다 Deferred 연결이 설정되면 발생합니다. 그래도 프로토콜 생성자에게 인수를 전달할 수있는 능력을 잃고 연결간에 상태를 공유 할 방법이 없기 때문에 이것을 사용할 수 있다고 생각하지 않았습니다.

그러나 나는 단지 그것을 깨달았다 ClientFactory 생성자가 수락합니다 *args 프로토콜 생성자로 전달합니다. 또는 적어도 그것은처럼 보입니다. 이것에 대한 문서는 사실상 없습니다. 이 경우 공장에 대한 참조 (또는 공장이 더 이상 필요하지 않은 경우)를 참조 할 수 있습니다. 그리고 나는 다시 돌아온다 Deferred 연결이 설정되면 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top