2011-03-28 5 views
70

필자는 파이썬의 Twisted 프레임 워크와 다른 프레임 워크를 비교해 보았을 때 점점 더 많은 것을 듣고 있습니다.Twisted에 대해 정말 멋진 점은 무엇입니까?

누구든지이 점을 밝혀 내고 Twisted를 다른 네트워크 프로그래밍 프레임 워크와 비교할 수 있습니까?

+2

원격으로 Twisted와 비교되는 [out there] (http://wiki.python.org/moin/UsefulModules#Networking)가없는 것 같아서 질문에 답하기가 조금 어렵습니다. . 어떤 대안을 고려하고 있습니까? –

+1

@Sven Python 개발자조차도 아니에요. Twisted가 선언 된 것만 큼 훌륭하게 만들었는지 궁금합니다. –

+2

@Sven Marnach : 그것은 문제 도메인에 의존합니다. 예를 들어, ['gevent'] (http://www.gevent.org/)는 Twisted의 "점쟁이"어플리케이션 http://blip.tv/에 대한 대안입니다. 파일/4883016 – jfs

답변

113

Twisted의 여러 측면이 멋지다는 것을 알 수 있습니다.

트위스트가 더 가능성이없는 이상 일부 원격 시스템 (대부분의 경우 클라이언트 또는 서버) 얘기하는 데 사용할 수있는 API가있을 것입니다 즉, 많은 프로토콜의 구현을 많이 포함 - HTTP, FTP, SMTP, POP3, IMAP4을 수 , DNS, IRC, MSN, OSCAR, XMPP/Jabber, telnet, SSH, SSL, NNTP, 또는 손가락, 또는 답하라, 또는 DJB'snetstrings 같은 낮은 수준의 프로토콜 빌딩 프로토콜 중 하나와 같은 정말 모호한 프로토콜 중 하나, simple line-oriented protocols, 또는 트위스트의 사용자 정의 프로토콜도 하나 Perspective Broker (PB) 또는 Asynchronous Messaging Protocol (AMP)입니다.

Twisted에 대한 또 다른 멋진 점은 이러한 저수준 프로토콜 구현의 최상단에는 사용하기가 더 쉬운 추상화가 있다는 것입니다. 예를 들어, HTTP 서버를 작성할 때 Twisted Web은 a "Resource" abstraction을 제공합니다.이를 통해 Python 객체에서 URL 계층 구조를 구성하여 요청에 응답하는 방법을 정의 할 수 있습니다.

이 모든 기능은 협업 API와 함께 사용됩니다. 이는 주로 네트워크에서 차단 기능을 구현하지 않으므로 a thread for every operation you want to do을 시작할 필요가 없기 때문입니다. 이것은 Twisted가 사람들의 특성 인 Twisted를 종종 지원하기 때문에 (응용 프로그램이 전체 호스트 클러스터를 사용하도록 확장 할 수있는 종류가 아닌, 단일 컴퓨터만을 포함하는 확장 성 종류 임) 확장성에 기여합니다. 하나의 스레드에서 수천 개의 스레드를 가지고있는 것보다 더 잘 작동하는 경향이있는 연결.

스레딩을 피하는 것은 테스트 및 디버깅 (일반적으로 안정성)에도 도움이됩니다. 일반적인 Twisted 기반 프로그램에서 선점 컨텍스트 스위칭이 없기 때문에 일반적으로 잠금에 대해 걱정할 필요가 없습니다. 발생하는 여러 네트워크 이벤트의 순서에 의존하는 경쟁 조건은 해당 네트워크 이벤트를 시뮬레이션하여 쉽게 테스트 할 수 있습니다 (컨텍스트 스위치 시뮬레이션은 대부분의 스레딩 라이브러리에서 제공하는 기능이 아닙니다).

Twisted 또한 실제로는 concerned with quality입니다.따라서 Twisted 버전에서는 rarely find regressions을 사용하게되며 일반적인 방법으로 사용하지 않는 경우에도 API의 대부분은 작동합니다 (일반적인 방법이 아닌 모든 방법을 테스트하려고하기 때문에). . 이는 특히 지난 3 ~ 4 년 동안 Twisted (또는 수정 된) 코드에 추가 된 모든 코드에 적용됩니다. 이후 100 % 라인 적용 범위가 최소 테스트 요구 사항이었습니다.

또 다른 Twisted의 강점은 종종 다른 플랫폼을 알아 내려고 10 년이라는 것입니다. quirks. 서로 다른 플랫폼에 문서화되지 않은 소켓 오류가 많이 있으며, 심지어 처리하는 것조차도 존재한다는 것을 배우는 것은 정말 어렵습니다. Twisted는 점점 더 많은 것을 점차적으로 다루었으며,이 시점에서 Twisted는 꽤 좋습니다. 더 젊은 프로젝트는 이러한 경험이 없기 때문에 공개하지 않는 프로젝트의 사용자에게만 발생하는 모호한 실패 모드를 놓치게됩니다.

Twisted에 대해 가장 멋진 점은 재미 있고 재미있는 것에 초점을 맞추고 지루한 많은 문제를 무시할 수있는 아주 지루한 라이브러리라는 것입니다. :)

+1

및 리소스 추상화에 대한 링크에서 제대로 문서화되지 않은 것 같습니다. 그러나 큰 응답, upvoting에 감사드립니다. – vinipsmaker

+0

좋은 점은 "문서화되지 않은 소켓 오류"에 대해 설명하는 것입니다. 좋은 설명. 감사. – Haranadh

8

글쎄 그것은 아마도 맛에 따른 것일 것입니다.

Twisted를 사용하면이 작업을 수행하는 데 필요한 모든 것에 대해 걱정할 필요없이 이벤트 기반 네트워크 서버/클라이언트를 쉽게 만들 수 있습니다. MIT License 덕분에 Twisted는 거의 모든 곳에서 사용할 수 있습니다. 그러나 저는 벤치마킹을하지 않았으므로 확장성에 대해서는 전혀 몰라요.하지만 꽤 잘 추측합니다.

또 다른 플러스는 Twisted Projects으로, 원하는 대부분의 서버/서비스를 구현하는 방법을 빠르게 볼 수 있습니다.

Twisted는 또한 위대한 약간의 documentation을 가지고 있습니다. 몇 주 전에 시작했을 때 빠르게 작동하는 프로토 타입을 얻을 수있었습니다.

내가 파이썬 씬에 아주 새로운 것은 내가 틀렸다고 정정 해주세요.

+4

Twisted로 시작한 것의 큰 장점 중 하나는 Twisted 자체가 설계된 방식으로 인해 결코 발생하지 않는 확장 성 문제의 전체적인 호스트가 있다는 것입니다. 네트워크 응용 프로그램을 구축 할 때 모든 평범한 방법을 처음으로 재발견하는 대신 새롭고 독창적 인 방법으로 발을 쏠 수 있습니다. – ncoghlan

+0

Twisted와 함께 작업 한 noobie로서의 예, 그렇습니다. 빨리 발견되었습니다. 그리고 건축술이 나에게 Netty [http://www.jboss.org/netty]를 많이 생각 나게하는 방식을 좋아합니다. 그래서 꽤 많이 사용되어 사고 방식을 선택하는 것은 매우 빨랐습니다. –

관련 문제