2014-12-04 2 views
2

Thrift 소리가 멋지지만 RPC 프레임 워크 (HttpServlet처럼)에서 익숙한 몇 가지 기본 기능을 찾을 수 없습니다. 내가 찾을 수없는 것들의 예 : 세션 관리, 필터링, 업로드/다운로드 진행.Thrift 위의 관리 레이어

누락 된 항목은 Thrift의 맨 위에있는 관리 레이어 일 수 있음을 이해합니다. 그렇다면 그러한 레이어의 예는 무엇입니까? 아마도 AOP (Aspect Oriented)입니까?

모든 언어로 컴파일되는 그런 레이어를 상상할 수 없습니다. 실종입니다. 세션 관리를 예로 들면, 몇 가지 인증이 필요하고 각 RPC마다 session_id를 전달해야하는 클라이언트가 여러 개있을 수 있습니다. 그렇게하는 모든 언어에 대해 비슷한 API를 기대합니다.

누구나 Thrift를위한 관리 레이어를 알고 계십니까?

+0

세션 관리 관련 질문보기 : http://stackoverflow.com/q/22704648/435605 –

답변

1

이렇게 조장 자체가 많은 도움을주지는 않습니다. 나는 몇 가지 제안을 비슷한 욕망을했고,이 있습니다 :

1. 단순히 서비스 메소드의 모든 매개 변수로 API 토큰 또는 일반적인 전송 데이터 구조체를 추가하려면 관리가 IDL

에 객체를 넣습니다. 매개 변수를 id 15로 설정하면 중간에 다른 매개 변수를 추가하더라도 항상 마지막 매개 변수가됩니다.

핸들러의 첫 번째 단계에서 추가 데이터를 사용하여 유효성을 검사하고 저장할 수 있습니다.

이렇게하면 절약이 지원되는 모든 플랫폼에서 유효하다는 이점이 있습니다. 당신은 HTTP와 같은 헤더를 원하고, 몸과 중고품 내용으로

당신이 당신의 전송으로 HTTP를 사용하는 경우 HTTP 이상

2. 중고품, 당신은 어떤 데이터를 포함 할 수 있습니다.

데이터를 삽입하는 데 사용하는 모든 플랫폼에 대해 사용자 지정 http 클라이언트가 필요하며 서버에서 사용자 지정 처리기를 사용해야 데이터를 사용할 수 있지만 그 중 어느 것도 어려운 작업이 아닙니다.

3. 해킹 프로토콜

다른 프로토콜을 래핑하고 사용자 정의 데이터를 주입 사용자 정의 프로토콜을 만들 수 있습니다. 대부분의 언어에 대해 멀티플렉싱 된 프로토콜이 저축 라이브러리에서 어떻게 작동하는지 살펴보십시오. c# here. 유선을 통해 service:method으로 메소드 이름을 보냅니다. 다중화 된 프로세서는이 인코딩을 해제하고 해당 프로세서로 전달합니다.

나는 메서드 이름 안에 임의의 키/값 쌍 (예 : http 헤더)을 인코딩하는 비슷한 방법을 사용했습니다.

이 단점은 사용하려는 각 플랫폼에 대해 더 복잡한 확장을 작성해야한다는 것입니다. 일단. 언어별로 언어에 따라 조금씩 차이가 있지만 일반적으로 한 번 파악하면 충분히 간단합니다.


이들은 내가 가지고있는 몇 가지 아이디어이며 다른 것들이있을 것이라고 확신합니다. 절약에 대한 좋은 점은 개별 구성 요소가 서로 어떻게 분리되어 있는지입니다. 특별한 요구 사항이있는 경우 특정 기능을 추가하는 데 필요한만큼 스왑 할 수 있습니다.