Twisted 응용 프로그램에서 데이터를 유지하는 방법을 이해하려고합니다. 이제 나는 트위스트 서버 쓰기로 결정했습니다 가정 해 봅시다 :Twisted 응용 프로그램에서 데이터 지속
- 인바운드 SMTP는
- 가 수정을 위해 제 3 자 시스템에 메시지를 보냅니다 요청 수용을
- 릴레이 목적지로 수정 된 메시지
전형적인 트위스트 튜토리얼은 대략, 당신은 Deferreds 및 콜백을 사용하여이 응용 프로그램을 구축 할 것이다 :
- 팩토리가 인바운드 요청을 처리합니다.
- 전체 전자 메일을 수신 할 때마다 원격 메시지 프로세서로 전화가 전송되어 지연이 반환됩니다.
- 수정 호출에서 문제가 발생하면 원래 메시지를 대체하는 오류 메시지를 추가합니다.
- 수신자에게 메시지를 보내려면 콜백을 추가하고, 다시 지연을 반환합니다.
- 실제 서버는 발신자 또는 기타 등을 다시 시도하거나 알리기 위해 추가 호출/오류 수정을 추가/포함합니다. 다시 한번 말하지만, 간단하게하기 위해이 값을 허용 가능한 양으로 간주하고 오류 만 기록한다고 가정합니다.
물론 이것은 충돌/재시작/다른 이벤트가 발생할 경우 NO 데이터를 유지합니다. 제 3의 영구 데이터 저장소 (RabbitMQ는 종종 언급 됨)가 포함 된 솔루션을 얻었으며 결과를 얻기 위해 12 가지의 임의의 방법이 제공 될 수 있습니다.
그러나 Twisted 앱에서 가장 잘 작동하는 몇 가지 방법이 있다고 상상해보십시오. 그들은 같은 중요시하는 점은 무엇입니까? 어떻게 진행중인 메시지를 저장하고 (충돌시 복구 할 수 있습니까?)
작성한 간단한 샘플 코드 (http://sscce.org/)를 제시하고 "이 모든 작업을 어떻게 수행 할 것인가"가 아닌 잘못된 내용을 묻는다면 도움이 될 것입니다. ? – Glyph
나는이 모든 것을 어떻게 구현할 것인지 절대 묻지 않았다. 나는 튜토리얼을 계속 읽었으며 (용어를 제외하고) 의사 코드는 꽤 많이 죽었다. 예를 들어 [이 튜토리얼] (https://github.com/jdavisp3/twisted-intro/blob/master/twisted-client-5/get-poetry.py)은 거의 똑같은 논리적 흐름을 따릅니다. 기본 전화를 SMTP 팩토리 ([this setup] (https://github.com/jdavisp3/twisted-intro/blob/master/twisted-server-1/fastpoetry.py)와 유사)로 바꾸고 poem_done을 async relay_message로 바꾸면 작동하는 서버가 생깁니다. – claytond
질문은 이와 같은 시스템에서 높은 수준의 "데이터를 유지하는 방법"(즉, 배달 안정성 제공)입니다. 그 대답은 다른 아키텍처 (즉, 콜백 체인을 대신하는 메시지 브로커 대체)를 사용하는 것일 수 있다는 것을 알고 있습니다. 그래서 나는 좀 더 일반적인 "더 나은 접근 방법이 있습니까?"에서 끝났습니다. – claytond