문제

나는 Erlang을 배우고 있으며 Mnesia DB에 매우 매료되어 있습니다. Erlang을 백엔드로 사용하여 C# / F#에서 실제 애플리케이션을 구축하고 싶습니다.

외부 세계의 Erlang 노드와 통신 할 수있는 좋은 솔루션을 찾고 있습니다.

지금까지 찾은 것 :

(ㅏ) otp.net, '기본'Erlang Comunication 프로토콜을 구현하는 OpenSource .NET 라이브러리

여기에 문제 :

  • 도서관은 그다지 성숙하지 않습니다
  • Java에서 포팅 된 객체 모델이 마음에 들지 않습니다 (BCL 클래스의 거의 정확한 복제본).
  • 연결에 스레딩 모델 사용이 마음에 들지 않습니다.
  • 많은 열린 TCP 포트가 필요합니다
  • 보안 부족

(b) 포트 / 소켓을 사용하십시오 Erlang에서 사용자 정의 프로토콜을 구현합니다.

여기에 문제 :

  • 나는 경험이 없습니다
  • 향후 버전에 대한 유지 관리 / 확장이 어렵습니다

이 주제에 대한 조언과 경험이 있습니까?

otp.net 라이브러리에서 내 요구에 맞게 만들거나 새로운 프로토콜을 처음부터 구현하려고 노력해야합니까?

JSON 또는 REST 솔루션은 어떻습니까? 트릭을 수행 할 Erlang 라이브러리가 있습니까?

도움이 되었습니까?

해결책

포트/소켓 솔루션은 좋은 생각이며 어렵지 않습니다. Google의 프로토콜 버퍼 당신이 필요로하는 것입니다. 사용하기가 매우 쉽고 효율적이며 유지 관리 가능합니다. C#, Erlang, Java, Python 등에 대한 구현이 있습니다 (참조 다른 언어 그리고 개발자 가이드)

프로토콜 버퍼를 사용하여 요청 및 응답 프로토콜 구조를 정의 할 수 있습니다. 그런 다음이를 사용하여 Erlang과 다른 지원되는 언어간에 의사 소통하십시오. 그만큼 지도 시간 모든 것을 설명 할 것입니다. 그 후에 당신이해야 할 일은 포트를 통해 응답을 보내는 것입니다.

이 접근법의 장점은 다음과 같습니다.

  1. 앞으로 쉽게 확장하고 프로토콜을 변경할 수 있습니다.
  2. 나머지 접근 방식보다 훨씬 효율적입니다
  3. 현재 Google에서 거의 모든 내부 RPC 프로토콜 및 파일 형식에 사용됩니다.

다른 팁

Erlang에서 REST API를 구현하려면해야 할 일만이 있습니다. 우수한 것을 사용하십시오 모키 웨브 키트 프로토콜을 구현하는 고유 한 HTTP 서버를 구축하려면.

당황하지 마십시오. 실제로 나타나는 것보다 쉽습니다.

이를 포함한 방법에 대한 많은 튜토리얼이 있습니다. 스크린 캐스트 세트 실용적인 프로그래머에서.

전체 JSON 라이브러리 세트가 제공되므로 괜찮을 것입니다!

물론, 당신은 Erlang과 함께 휴식을 취할 수 있습니다. http://www.infoq.com/articles/vinoski-erlang-rest - 앱의 요구에 적합한 경우 REST는 훌륭한 접근 방식입니다. (다음 주 피렌체에서 Pycon Italia Tre는 Erlang/Python Cooperation에 관한 세션을 보유하고 있습니다. www.pycon.it tuscany 근처에 있다면 ;-).

또 한있다 JSON 라이브러리 Erlang의 경우, 당신은 조사하고 싶을 것입니다. 나는 그것을 사용하지 않았으므로 경험에서 그것에 대해 아무 말도 할 수 없습니다.

Yaws 또는 Mochikit을 사용하든 일부 휴식 솔루션이 유용하다는 데 동의하지만, MNESIA가 처리 할 수있는 쿼리를 생성하기 위해 중간 "언어"를 정의하려고 노력할 것입니다.

그러므로 나는이 조언을 제공한다. 자신을 위해 어떤 프로젝트를 염두에두고 있는지, Erlang에서 구현하고 사용 가능한 도구를 사용하십시오. 여러 가지 방법으로 보상을받을 것입니다.

그런 다음 다시 CouchDB를 시도 할 수 있습니다.

YAWS와 클라이언트 측에서 간단한 HTTP 요청/응답 구현을 사용하여이를 수행합니다. YAWS 구현은 인수를 추출한 후 적절한 Gen_Server 프로세스에 호출을 위임합니다.

이 접근법의 유일한 단점은 빠른 것이 아니라는 것입니다 (Google 프로토콜 버퍼가 더 좋을 것입니다) - HTTP Parlance에서 연결을 "살아있는"상태로 유지함으로써 모든 설정 비용을 줄이고 경부 소켓 연결 수를 줄이는 데 도움이되었습니다. 대규모 데이터 세트를 반환하는 경우 결과를 스트리밍하여 조금 더 창의적으로 얻어야합니다. 문제가되지 않은 대부분의 데이터 요청에 대해 응답이 쉽게 메모리에 맞을 수 있습니다.

프로토콜의 원시 성능이 그다지 문제가되지 않는 경우 일부 상향 :

  • 보안 모델 (HTTPS 또는 인증)에 연결할 수 있습니다.
  • 웹 요청을 할 수있는 모든 것에서 API를 호출 할 수 있습니다 (우리는 오래된 Perl 코드와 Excel 시트가 많았습니다.

우리는 그 후 OTP.net을 다시 작성했습니다

이 라이브러리는 .NET/CLR을 위해 처음부터 다시 작성되었으므로 (Java에서 방금 변환 된 전임자와 달리)이 라이브러리는 여러 배나 더 성숙합니다.

이 게시물을 살펴보십시오.

http://blog.aumcode.com/2013/10/nfx-native- interoperability-of-net-with.html

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