60

私はオンライン ゲームであるペット プロジェクトを持っています。ゲーム エンジン全体は C# で記述されています。Node.JS を使用して構築されたソリューションから、この既存のアセンブリ (.dll) の関数を呼び出すことができる方法があるかどうかを知りたいです。 、Socket.IO、Express など?

ゲーム エンジン自体はかなり完成しています。テスト済みで堅牢です。オーバーヘッドをあまりかけずにその機能を公開するためのきちんとした方法があることを願っています。

更新

私自身の質問に少し答えるために.. (最新の Web ソケット プロトコル ドキュメントに基づいて) 独自の Web ソケット サーバーの構築を終了しました。これは C# で記述され、Mono を使用してコンパイルされているため、Mono を実行している Linux ボックスでホストできるため、(いくつか調整を加えれば) 既存のゲーム エンジンを使用できます。

更新 2 私が最初に探していたものを正確に実行するプロジェクトが存在します - http://tjanczuk.github.io/edge/#/

UPDATE 3 Edge.js はノードの最新バージョンをサポートし、新しいedge-jsパッケージを使用して .net コアをサポートします。

Node.Js 6.x、7.x、8.x、9.x、10.x、11.x のサポート Windows/Linux/macOS での .NET Core 1.0.1 ~ 2.x のサポート。Mono ランタイム 4.8.x ~ 5.x のサポート。

https://www.npmjs.com/package/edge-jsからインストール可能

4

8 に答える 8

30

私が開始した edge.js プロジェクト ( http://tjanczuk.github.com/edge ) を確認してください。.NET および node.js コードをインプロセスで実行するためのメカニズムを提供します。Edge.js を使用すると、node.js から .NET コードを呼び出し、.NET から node.js コードを呼び出すことができます。.NET と node.js の間でデータをマーシャリングし、マルチスレッド CLR とシングル スレッド V8 の間でスレッド モデルを調整します。

edge.js を使用すると、node.js から既存の .NET コードのアイランドにアクセスできます。これは、シナリオに一致しているようです。

于 2013-03-26T06:16:30.797 に答える
27

私は最近同じ課題に直面しました(node.js javascriptからC#コードを呼び出すための要件)。何千行もの複雑なC#コードがありましたが、JavaScriptに移植するのは本当に好きではありませんでした。

次のように解決しました。

  • 関連するC#コードは、基本的にDLLアセンブリの1〜2クラスです。
  • C#クラスのインターフェイスのサブセットであるCOMインターフェイスを定義し、そのインターフェイスをC#クラスに実装しました。したがって、DLLはインプロセスCOMサーバーになりました。
  • 標準のWin32COMAPIを使用してC#COMクラスをインスタンス化し、COMインターフェイスを使用してnode.js javascriptからC#コードにメソッド呼び出しをルーティングするnode.js拡張DLLを実装しました。

これにより、一方向にのみ電話をかけたい場合の問題が解決します。また、C#からjavascriptを呼び出す必要がありました。これはもっと難しいです。1つはする必要があります:

  • node.js拡張DLLにCOMオブジェクトを実装します(ATLはここで役立ちます)
  • このCOMオブジェクトのインターフェイス参照をC#コードに渡します(COM相互運用機能)
  • COMオブジェクトを介してnode.jsのV8オブジェクトに呼び出しをルーティングします

時間があれば、これからサンプルプロジェクトを作るかもしれません。

于 2012-01-15T19:12:22.150 に答える
18

C# と .Net でプログラミングしながら、軽量の HTTP サーバーを立ち上げたいだけなら、Kayak にチャンスを与えるべきです。これは C# 用の軽量の HTTP サーバーであり、その意味では node.js のように動作します。

カヤックhttp

アップデート:

Web リクエストを処理する軽量の HTTP サーバーを探している場合は、現在いくつかの選択肢があります。

  • ServiceStack (推奨)
  • マイクロソフト WebAPI
  • ナンシーFx

私の知る限り、上記のすべては一部のバージョンの Mono で動作するため、Windows と Unix ベースのシステムの両方でホストできます。

于 2011-01-26T18:46:43.123 に答える
8

.Net アドオンを作成できます。つまり、通常のネイティブ アドオンを作成し、CLI/C++ 呼び出しを介して .Net 呼び出しを .Net dll に追加します。

実際には、通常は C# dll ライブラリを作成し、それを CLI/C++ ノード アドオン プロジェクトから呼び出します。ノードが正しくロードできるように、実際のノード アドオン定義ファイルが CLR サポートなしでコンパイルされていることを確認するなど、ちょっとした工夫があります。

これを実現する方法の例については、https : //github.com/saary/node.net を参照してください。

于 2011-11-22T22:55:54.757 に答える
6

次の回答は古くなっていますが、最初のリリースから Node.js を理解するのに役立ちます
Node.js は、nodejs.org で Windows 用にネイティブに利用できるようになりました。cygwin は必要ありません。

まず第一に、現時点では Node.js のネイティブ Windows ポートはなく、cygwin バージョンしかありません (しかし、既にご存知かと思いますが)。

ネイティブ ライブラリを呼び出すためのラッパーを提供するノード モジュールが GitHub のどこかに浮かんでいましたが、iirc はライブラリでしか機能しませんでした.so

したがって、C# DLL を使用する場合は、最初にネイティブ Node.js 拡張機能をインターフェースとして作成する必要があります:
https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native -拡張子/

その拡張機能から DLL をロードし、Node.js からの呼び出しを C# コードにラップする必要があります。つまり、低レベルの C/C++ コードを記述し、C# の値を V8 のものに変換する必要があります。

私は C++ と V8 の経験しかありません。コード例が少しまばらで、C++ クラスのラッピングも簡単ではないため、始めるのは少し難しいです。しかし、私は C++ OpenGL バックエンドを使用する小さなJS ゲーム エンジンのようなものを書きました。これは未完成です (コメントはほとんどありません) が、いくつかのアイデアが得られるかもしれません。

注: V8 へのラッパーの自動生成を提供するプロジェクトがいくつかありますが、それらは C++ のみです。

結論として、C# ラッパーを機能させるのは非常に冒険的なことだと思いますが、可能であるはずです。

于 2011-01-11T10:58:10.990 に答える
2

Node.js から .NET への移植であるこのプロジェクトでは、運が良いかもしれません。私自身は使用していませんが、ネイティブの .NET 実装を使用すると、理論的には必要なことを実行できるはずです。

また、別の方向に進んで、C# ゲーム エンジンを Mono に移植し (別名: Windows に深くハマっていない限り再コンパイル)、そこからラッパーをビルドできるかどうかを確認することもできます。

于 2011-01-25T18:04:13.123 に答える