문제

네트워크 프로토콜을 사용하여 타사에서 확장할 기존 독립 실행형 응용 프로그램이 있습니다.기능은 이미 구현되어 있으므로 외부에 노출하기만 하면 됩니다.

전송 프로토콜(UDP)이 이미 선택되었다고 가정할 때, 애플리케이션 프로토콜을 설계하는 데 도움이 되는 리소스가 있습니까?

소프트웨어 디자인에 관한 정보는 많은 것 같은데, 프로토콜 디자인에 관한 정보는 없는 것 같습니다.난 이미 살펴봤어 애플리케이션 프로토콜 설계.

도움이 되었습니까?

해결책

보다 Jabber 프로토콜 설계 지침 그리고 RFC 4101. 리뷰어에게 RFC를 이해하기 쉽게 만드는 것이 목표이지만,이 RFC는 흥미로운 조언을 제공합니다.

다른 팁

당신은 보셨습니까? Google 프로토콜 버퍼? 이 문제를 해결하는 좋은 방법 인 것 같습니다.

기존 앱과 통신하는 엔드 포인트를 작성한 다음 프로토 버퍼 프로토콜을 사용하여 '외부'에서 응답 할 수 있습니다. 이진이므로 작고 빠르며 자신의 프로토콜 관리자를 작성할 필요가 없습니다. 왜냐하면 Google을 사용할 수 있기 때문입니다. 단점은 시스템의 양쪽 ( '서버'측면과 소비자/클라이언트 측면에서 구현해야한다는 것입니다.

또 다른 권장 사항 프로토콜 버퍼 - 약간의 노력으로 좋은 타이트 바이너리. 그러나 이진 프로토콜은 잘 정의되어 있지만 아직 합의 된 RPC 표준은 없습니다 (몇몇은 진행 중입니다, TCP 또는 HTTP를 향해 기대하는 경향).

사양은 클라이언트와 서버를 다른 아키텍처, 좋은 것입니다 - 또한 확장 가능합니다.

경고 : 저는 그 중 하나의 저자입니다 .NET 버전, 그래서 나는 편견이있을 수 있습니다; p

우선, UDP는 기본적으로 단방향 브로드캐스트 전송 방법입니다.또한, 그것은 잠재적으로 손실이 있는, 따라서 누락된 패킷과 순서가 잘못된 패킷을 처리할 수 있어야 합니다.UDP에서 어떤 수준의 안정성이 필요하거나 양방향 연결이 필요한 경우 결국 TCP의 거의 모든 것이 필요하므로 먼저 시작하고 네트워크 스택이 이를 처리하도록 하는 것이 좋습니다.

다음으로, 데이터가 단일 IP 패킷보다 클 가능성이 있는 경우 각 패킷의 시작과 끝을 식별하는 방법과 불법 또는 손상된 패킷을 처리하는 방법이 필요합니다.패킷 길이가 포함된 헤더, 바닥글, 체크섬 등을 추천합니다.

그런 다음 메시지와 응답을 인코딩하는 방법이 필요합니다.주변에는 많은 RPC 프로토콜이 있습니다.SOAP를 살펴보거나 사용자 정의 XML 기반 프로토콜 또는 바이너리 프로토콜을 디자인할 수 있습니다.

당신은 당신이 자신의 프로토콜을 디자인, 문서화 및 유지 관리하고 싶은지, 이미 존재하는 것을 사용하고 싶은지 정말로 생각해야합니다. 귀하의 요구에 맞는 문서화 된 프로토콜이 이미있을 가능성이 있습니다. 당신이하고있는 일에 따라 처음에는 과잉으로 보일 것입니다. 모든 사양을 구현하는 것은 자신의 글을 쓰는 것보다 지루하고 재미있게 보일 것입니다. 그러나 몇 년 안에 애플리케이션이 여전히 적극적으로 개발되기 위해서는 당신을 구해야합니다. 이미 존재하고 제 3 자에 의해 알려진 것을 사용하기 위해 많은 시간과 돈. 게다가 해당 프로토콜에 기존 라이브러리를 사용할 수 있다면 구현 부분이 훨씬 더 빠릅니다.

새로운 프로토콜을 디자인하는 것은 모든 결함과 함께 살아야 할 때 하나를 구현하는 것보다 더 재미 있지만 하나를 구현하는 것보다 더 재미 있습니다. 프로토콜이 완벽하지는 않지만 설계 한 적이 없다면 기존 잘 알려진 프로토콜을 설계 한 사람들보다 더 많은 실수를 할 수 있습니다.

요컨대, 가능할 때마다 이미 존재하는 것을 활용하십시오.

Protocol을 접지에서 구축하고 싶지 않다면 살펴보아야합니다. 비누. 지원은 프로그래밍 언어에 따라 다르지만 교차 언어 커뮤니케이션은 명시 적으로 권장됩니다.

불행히도 UDP와 비누는 유아기에 갇힌 것으로 보이며 HTTP는 가장 일반적으로 사용됩니다.

XML을 선택하는 경우 마크 업의 거대한 오버 헤드가 있음을 명심하십시오.

간단한 바이너리 프로토콜은 XML에 비해 구문 분석 할 수있는 ressources도 필요하지 않습니다.

네트워크 프로토콜을 사용하여 타사에 의해 확장 될 기존 독립형 응용 프로그램이 있습니다.

프로그램이하는 일과이 타사 확장의 특성에 대해 조금 더 아는 것이 도움이 될 것입니다. UDP 사용에 대한 이론적 근거일까요?

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