Pergunta

Estou aprendendo erlang e estou muito fascinado pelo db mnesia. Quero construir alguma aplicação mundo real em C # / F # usando erlang como backend.

Eu estou procurando uma solução boa para se comunicar com os nós Erlang do mundo exterior.

O que eu encontrei até agora:

(A) OTP.net , uma biblioteca opensource .net implementação do protocolo erlang comunicação 'nativa'

Os problemas aqui:

  • A biblioteca não é muito maduro
  • Eu não como o modelo de objeto portados de Java (muitos quase exata réplicas das classes BCL)
  • Não faça como o uso modelo de segmentação para conexões.
  • Muitas portas TCP abertas são obrigados
  • A falta de segurança

(B) Usar portas / soquetes em Erlang e implementar um protocolo personalizado.

Os problemas aqui:

  • Eu não tenho nenhuma experiência
  • Difícil de manter / ampliar para versões futuras

Você tem algum conselho, experiência neste tema?

Eu deveria trabalhar na biblioteca OTP.net para ajustá-la às minhas necessidades ou tentar implementar um novo protocolo a partir do zero?

Que tal uma solução JSON ou descansar? Existe alguma biblioteca erlang que faria o truque?

Foi útil?

Solução

A solução porta / socket é uma boa idéia e não é difícil como pode parecer. do Google é apenas o que você precisa. É muito fácil de usar, eficiente e sustentável. Tem implementações para C #, erlang, Java, Python e muitos mais (Veja OtherLanguages ?? e guia do desenvolvedor )

É possível utilizar tampões de protocolo para definir a estrutura de protocolo de pedido e de resposta. Em seguida, usá-lo para se comunicar entre erlang e qualquer outro idioma suportado. A tutorial vai explicar tudo. Depois que tudo que você precisa fazer é enviar a resposta sobre o porto.

A vantagem dessa abordagem é que:

  1. Você pode facilmente estender e alterar a protocolo no futuro
  2. É muito mais eficiente do que o abordagem DESCANSO
  3. Atualmente é usado pelo Google para quase todo o seu RPC interna protocolos e formatos de arquivo

Outras dicas

Se você quiser implementar uma API REST em Erlang só há uma coisa a fazer. Use o excelente MochiWeb Kit para construir o seu próprio servidor HTTP que implementa o protocolo.

Do not panic, é realmente mais fácil do que parece.

Há uma série de tutoriais sobre como fazê-lo, incluindo um screencast definir dos Pragmatic Programmers.

Ele vem com um conjunto completo de bibliotecas JSON, então você vai ficar bem!

Claro, você pode fazer descansar com Erlang, ver por exemplo, http://www.infoq.com/articles/vinoski-erlang-rest - se adequado para as necessidades das suas aplicações, REST é uma excelente abordagem. (PyCon Italia Tre, na próxima semana em Florença, tem sessões sobre a cooperação Erlang / Python, consulte www.pycon.it se você estiver perto de Toscana; -).

Há também um JSON biblioteca para Erlang, que você pode querer olhar. Eu nunca usei isso, então não posso dizer nada sobre isso por experiência própria.

Embora concorde que alguma solução REST é útil, se você usa Bouba ou Mochikit, você vai encontrar-se tentar definir alguns "linguagem" intermediário a fim de gerar consultas que Mnesia seria capaz de processo.

Por isso eu ofereço este conselho; qualquer projeto que você tem em mente para si mesmo, apenas implementá-lo em erlang e usar as ferramentas disponíveis. Você será recompensado de muitas maneiras.

Em seguida, novamente você sempre pode tentar CouchDB.

Fazemos isso usando um simples http implementação de solicitação / resposta no lado do cliente bouba e. A implementação bouba simplesmente delega a chamada para o processo gen_server apropriado Depois de extrair os argumentos.

A única desvantagem dessa abordagem é que não é tão rápidas (os buffers de protocolo do Google seria melhor) - e, mantendo a conexão "vivo" em HTTP linguagem ajudou a reduzir todos os custos de instalação e reduz o número de soquete obsoleto conexões. Se você está retornando de grandes conjuntos de dados que você tem que ficar um pouco mais criativo com streaming dos resultados de volta. Para a maioria de nossos pedidos de dados que não foi um problema -. A resposta poderia facilmente caber na memória

Alguns upsides se o desempenho bruto do protocolo que não é muito de um problema:

  • Você pode ligar para um modelo de segurança (HTTPS ou autenticação)
  • Você pode chamar a API de qualquer coisa que pode fazer uma solicitação da web (tivemos um monte de código perl de idade e planilhas do Excel que penduram ao redor - classificando-out foi trivial)

Desde então, re-escrita OTP.NET

Esta biblioteca é muitas vezes mais maduros, como tem sido re-escrito do zero para .NET / CLR, (Ao contrário de seu antecessor que acabou de ser convertido de Java)

Dê uma olhada neste post:

http: //blog.aumcode. com / 2013/10 / nfx-nativa-interoperabilidade-de-net-with.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top