14

私はerlangを学んでいて、mnesiadbに非常に魅了されています。バックエンドとしてerlangを使用して、C#/ F#で実際のアプリケーションを構築したいと思います。

私は外の世界からのerlangノードと通信するための良い解決策を探しています。

私がこれまでに見つけたもの:

(A)OTP.net、「ネイティブ」erlang通信プロトコルを実装するオープンソースの.netライブラリ

ここでの問題:

  • ライブラリはあまり成熟していません
  • Javaから移植されたオブジェクトモデルが好きではありません(BCLクラスのほぼ正確なレプリカが多すぎます)
  • 接続に使用するスレッドモデルは好きではありません。
  • 多くの開いているTCPポートが必要です
  • セキュリティの欠如

(B) erlangでポート/ソケットを使用し、カスタムプロトコルを実装します。

ここでの問題:

  • 経験がない
  • 将来のバージョンのために維持/拡張するのは難しい

このトピックに関するアドバイスや経験はありますか?

OTP.netライブラリを自分のニーズに合うように作業する必要がありますか、それとも新しいプロトコルを最初から実装する必要がありますか?

JSONまたはRESTソリューションはどうですか?トリックを行うerlangライブラリはありますか?

4

7 に答える 7

16

ポート/ソケット ソリューションは良いアイデアであり、見た目ほど難しいものではありません。Google のプロトコル バッファはまさに必要なものです。非常に使いやすく、効率的で、保守が容易です。C#、erlang、java、python などの実装があります ( OtherLanguagesおよび開発者ガイドを参照) 。

プロトコル バッファを使用して、要求と応答のプロトコル構造を定義できます。次に、それを使用して、erlang と他のサポートされている言語との間で通信します。チュートリアルはそれをすべて説明します。その後、ポートを介して応答を送信するだけです。

このアプローチの利点は次のとおりです。

  1. 将来的にプロトコルを簡単に拡張および変更できます
  2. REST アプローチよりもはるかに効率的です。
  3. 現在、Google では、ほぼすべての内部 RPC プロトコルとファイル形式に使用されています。
于 2009-05-04T13:14:18.523 に答える
4

Erlang で REST API を実装したい場合、やるべきことは 1 つだけです。優れたMochiWeb Kitを使用して、プロトコルを実装する独自の HTTP サーバーを構築します。

パニックにならないでください。見た目よりも簡単です。

Pragmatic Programmersのスクリーンキャスト セットを含む、その方法に関するチュートリアルが多数あります。

json ライブラリの完全なセットが付属しているので、問題ありません。

于 2009-04-30T15:59:09.223 に答える
2

もちろん、ErlangでRESTを実行できます。たとえばhttp://www.infoq.com/articles/vinoski-erlang-restを参照してください。アプリのニーズに適している場合、RESTは優れたアプローチです。(来週フィレンツェで開催されるPycon Italia Treは、Erlang / Pythonの協力に関するセッションを開催しています。トスカーナの近くにいる場合は、www.pycon.itを参照してください;-)。

于 2009-04-30T15:07:52.030 に答える
2

また、Erlang 用のJSON ライブラリもあり、調べてみるとよいでしょう。私はそれを使用していないので、経験からそれについては何も言えません。

于 2009-04-30T15:28:37.940 に答える
2

Yaws を使用する場合でも Mochikit を使用する場合でも、いくつかの REST ソリューションが役立つことには同意しますが、Mnesia が処理できるクエリを生成するために、中間の「言語」を定義しようとしていることに気付くでしょう。

したがって、私はこのアドバイスを提供します。自分で考えているプロジェクトが何であれ、それを erlang で実装し、利用可能なツールを使用するだけです。あなたは多くの方法で報われるでしょう。

その後、いつでも CouchDB を試すことができます。

于 2009-05-01T20:01:36.247 に答える
0

それ以来、OTP.NET を書き直しました。

このライブラリは、.NET/CLR 用にゼロから書き直されているため、何倍も成熟しています (Java から変換されたばかりの前身とは異なります)。

この投稿を見てください:

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

于 2013-11-23T02:17:09.000 に答える
0

これは、クライアント側で YAWS と単純な http 要求/応答の実装を使用して行います。YAWS 実装は、引数を抽出した後、呼び出しを適切な gen_server プロセスに委任するだけです。

このアプローチの唯一の欠点は、それほど高速ではないことです (Google プロトコル バッファの方が優れています)。また、HTTP 用語で接続を「有効」に保つことで、すべてのセットアップ コストを削減し、古いソケット接続の数を減らすことができました。大量のデータ セットを返す場合は、結果をストリーミングして戻す方法をもう少し工夫する必要があります。問題ではなかったほとんどのデータ要求では、応答は簡単にメモリに収まりました。

プロトコルの生のパフォーマンスがそれほど問題にならない場合の利点:

  • セキュリティ モデル (HTTPS または認証) にフックできます
  • API は、Web リクエストを作成できるあらゆるものから呼び出すことができます (古い perl コードと Excel シートがたくさんあり、それらを整理するのは簡単でした)。
于 2009-06-07T16:55:24.630 に答える