문제

HTTP 프로토콜을 구현 해야하는 응용 프로그램을 작성한다고 가정 해보십시오. 프로토콜은 상당히 복잡하며 어떤 트랜잭션의 단계에 따라 여러 명령을 허용 할 수 있습니다.

예를 들어 SMTP를보십시오. "rcpt"및 "mail"을 수신하기 전에 "data"명령이 전송되면 SMTP 서버가 오류를 던져야합니다.

내 질문은 : 코드에서 이와 같은 프로토콜을 처리하는 가장 좋은 방법은 무엇입니까? 이와 관련된 디자인 패턴이 있습니까?

편집 :이 질문은 프로토콜을 구현하는 이론과 관련이 있습니다. 라이브러리를 사용하는 것이 실제로 최선의 방법이라는 것을 알고 있습니다.

도움이 되었습니까?

해결책

상태 기계

제 생각에는 상태 기계가 프로토콜을 모델링하고 처리하는 가장 쉬운 방법입니다. 수신 된 유효한 명령과 관련된 여러 전환으로 상태에 도달합니다. 그런 다음 각 주에서는 특정 하위 집합의 명령 만 허용합니다.

상태 기계는 프로그램의 어휘 분석을 위해 컴파일러 구성에 사용됩니다. 프로토콜 구현 문제를 특별한 경우로 본다.

다른 팁

이와 같은 프로토콜을 처리하는 가장 좋은 방법은 라이브러리를 사용하는 것입니다. 지구상에서 사용되는 거의 모든 컴퓨터 언어에는 HTTP 및 SMTP를 처리하기 위해 기존의 잘 테스트 된 라이브러리가 있습니다.

@fluffels@

Zed Shaw (Mongrel의 저자) 당신과 동의합니다; 그는 사용한다 ragel.

A28에 동의합니다. 가장 좋은 방법은 다음 중 하나입니다.

  • 프로토콜 서버를 구현하는 라이브러리를 사용하십시오
  • 기존 서버 (예 : IIS, APACHE API 등, SendMail Milter 등을 통한 웹 서버 확장자)로의 확장으로 응용 프로그램을 작성하거나
  • 요청이 수신 될 때 RPC가 응용 프로그램에 RPC를 호출 할 수 있도록 기존 서버를 수정하십시오.

프로토콜을 자체적으로 구현하면 상호 운용성 문제가있는 버기 구현이 발생할 수 있습니다.

이를위한 흥미로운 도구는입니다 꼬인 이는 파이썬-특이 적이지만 다소 영리하며 수많은 기존 프로토콜 (HTTP, SMTP, IRC 등)의 구현을 포함합니다.

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