Frage

I ' m learning erlang, und ich bin sehr fasziniert von der mnesia db.Das ich bauen will einige real-world-Anwendung in C# / F# mit erlang als backend.

Ich bin auf der Suche nach einer guten Lösung, um die Kommunikation mit erlang-Knoten von der Außenwelt.

Was ich bisher gefunden:

(A) OTP.net, ein opensource .net-Bibliothek, die Umsetzung der 'native' erlang comunication protocol

Probleme hier:

  • Die Bibliothek ist nicht sehr ausgereift
  • Ich weiß nicht, wie das Objekt-Modell portiert von Java (auch viele fast exakte Replikate von BCL-Klassen)
  • Ich weiß nicht, wie das threading-Modell für verbindungen.
  • Viele offene TCP-ports benötigt
  • Mangel an Sicherheit

(B) die Verwendung von ports / sockets in erlang und implementieren Sie eine benutzerdefinierte Protokoll.

Probleme hier:

  • Ich habe keine Erfahrung
  • Schwer zu pflegen / erweitern für zukünftige Versionen

Tun Sie haben jede Beratung, die Erfahrung in diesem Thema?

Sollte ich die Arbeit an der OTP.net Bibliothek zu machen, die zu meinen Anforderungen passen, oder versuchen Sie zu implementieren eines neuen Protokolls von Grund auf neu?

Was ist eine JSON oder REST-Lösung?Gibt es eine erlang-Bibliothek, würde den trick tun?

War es hilfreich?

Lösung

Die port/socket-Lösung ist eine gute Idee und ist nicht so schwierig, wie es scheinen mag. Google ' s protocol buffers genau das, was Sie brauchen.Es ist sehr einfach zu benutzen, effizient und wartungsfreundlich.Es Implementierungen für C#, erlang, java, python und viele mehr (Siehe OtherLanguages und developer guide)

Sie können die Verwendung protocol buffers zu definieren, die request-und response-Protokoll-Struktur.Dann verwenden Sie es, um die Kommunikation zwischen erlang und anderen unterstützten Sprache.Die tutorial erklären Sie alle.Nach, dass alles, was Sie tun müssen ist, schicken die Antwort über den Hafen.

Der Vorteil dieses Ansatzes ist, dass:

  1. Sie können einfach erweitern und ändern Sie die Protokoll in die Zukunft
  2. Es ist viel effizienter als das REST-Ansatz
  3. Es ist derzeit verwendet von Google für die fast alle seine internen RPC Protokolle und Dateiformate

Andere Tipps

Wenn Sie eine REST-API in Erlang implementieren möchten gibt es nur eine Sache zu tun. Verwenden Sie die ausgezeichneten MochiWeb Kit Ihren eigenen HTTP-Server zu erstellen, die Ihr Protokoll implementiert.

Keine Panik, es ist wirklich einfacher, als es scheint.

Es gibt eine Reihe von Tutorials darüber, wie es mit einem Screencasts gesetzt von dem Pragmatische Programmierer.

Es kommt mit einem kompletten Satz von json Bibliotheken, so dass Sie in Ordnung sein!

Sicher, Sie können mit Erlang tun REST, siehe z.B. http://www.infoq.com/articles/vinoski-erlang-rest - gegebenenfalls für Bedürfnisse Ihrer Apps, ist REST ein ausgezeichneter Ansatz. (PyCon Italia Tre, nächste Woche in Florenz, hat Sitzungen auf Erlang / Python Zusammenarbeit finden www.pycon.it, wenn Sie in der Nähe von Toskana sind; -).

Es gibt auch einen JSON Bibliothek für Erlang, die Sie vielleicht in suchen. Ich habe es nicht verwendet wird, so kann ich nichts sagen, über sie aus eigener Erfahrung.

Während ich damit einverstanden, dass einige REST-Lösung nützlich ist, ob Sie Yaws oder Mochikit verwenden, werden Sie feststellen, selbst versuchen, einige Zwischen „Sprache“ zu definieren, um Abfragen zu generieren, dass Mnesia der Lage wäre, zu verarbeiten.

Deshalb biete ich diesen Rat; was Projekt, das Sie im Auge zu haben, dann implementieren es nur in erlang und nutzt die Tools zur Verfügung. Sie werden in vielerlei Hinsicht belohnt werden.

Dann wieder können Sie immer versuchen CouchDB.

Wir tun dies mit gieren und eine einfache HTTP-Anforderung / Antwort-Implementierung auf der Client-Seite. Die Framboesie Implementierung einfach Delegierten den Anruf an dem entsprechenden gen_server Prozess nach den Argumenten zu extrahieren.

Der einzige Nachteil bei diesem Ansatz ist, dass es nicht so schnell ist (die Google Protokoll Puffer wären besser) - und durch die Verbindung „lebendig“ in HTTP parlance halten half all den Einrichtungskosten zu reduzieren und reduziert die Anzahl der veralteten Steckdose Verbindungen. Wenn Sie große Datenmengen sind Rückkehr müssen Sie die Ergebnisse mit Streaming wieder ein bisschen mehr kreativ. Für die meisten unserer Datenanforderungen, die kein Problem war - die Antwort könnte leicht in den Speicher passen

.

Einige upsides wenn rohe Leistung des Protokolls nicht so sehr ein Problem ist:

  • Sie können in ein Sicherheitsmodell Haken (HTTPS oder Authentifizierung)
  • Sie können die API von etwas nennen, die eine Web-Anfrage zu machen (wir um hängen viele alte Perl-Code und Excel-Sheets hatte - das Sortieren sie aus war trivial)

Wir haben da neu geschrieben OTP.NET

Diese Bibliothek ist oft reifer, als es von Grund auf für .NET / CLR neu geschrieben wurde,  (Im Gegensatz zu seinem Vorgänger, der von Java nur umgewandelt wurde)

Werfen Sie einen Blick auf diesen Beitrag:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top