Вопрос

У меня есть проект по домашниму животным, который является онлайн-игрой, весь игровой двигатель написан в C #, и я хотел бы знать, есть ли в любом случае, я могу позвонить в функции этой существующей сборки (.dll) из решения, созданного с использованием Node.js , Socket.io, Express etc?

Сам игровой двигатель довольно полный; проверено и надежно. Я надеюсь, что есть какой-то аккуратный способ разоблачить его функциональность без слишком большого количества накладных расходов.

ОБНОВИТЬ:

Чтобы ответить на мой собственный вопрос .. Я закончил создание собственного сервера веб-сокета (на основе самого текущего документа протокола веб-сокета). Он написан в C # и скомпилирован с использованием Mono так, чтобы он мог проводиться на коробке Linux, работающем в Mono, и поэтому (с несколькими настройками) я могу использовать мой существующий игровой двигатель.

Обновление 2.Проект, который имеет именно то, что я изначально искал сейчас - http://tjanczuk.github.io/geed/#/

Обновление 3.Edge.js поддерживает последние версии узла и .NET CORE с новым jeak-js. упаковка.

Поддержка Node.js 6.x, 7.x, 8.x, 9.x, 10.x, 11.x, поддержка .NET Core 1.0.1 - 2.x в Windows / Linux / MacOS. Поддержка Mono Runtime 4.8.x - 5x.

Может быть установлен из https://www.npmjs.com/package/edge-js.

Это было полезно?

Решение

Если все, что вы хотите сделать, это раскрутить легкий HTTP-сервер, пока все еще программирование с C # и .NET Вы должны дать каяк шанс. Это легкий HTTP-сервер для C # и ведет себя в виде Node.js в этом смысле.

каяхТТП.

Обновлять:

Если вы ищете легкий HTTP-сервер для обработки веб-запросов, у вас сегодня есть пара альтернатив:

  • ServiceStack (рекомендуется)
  • Microsoft webapi.
  • Nancyfx.

Насколько известно все вышеперечисленные работы на некоторой версии MONO, так что вы все еще можете провести их в системах на основе Windows, так и в UNIX.

Другие советы

Проверьте проект Edge.js, который я начал (http://tjanczuk.github.com?). Он предоставляет механизм для работы .NET и Node.js в процессе. Edge.js позволяет вам звонить .NET код из Node.js и Node.js Code из .NET. ИТ Marshals данные между .NET и Node.js, а также примиряет модели резьбы между многопоточными CLR и одним резьбом V8.

Используя Edge.js, вы можете получить доступ к островам ранее существовавшего .net код из Node.js, который, кажется, соответствует вашему сценарию.

Я недавно столкнулся с тем же вызовом (требование позвонить в код C # из Node.js javaScript). У меня были 1000-х строк сложных C # код, которые мне действительно не понравилось портировать в JavaScript.

Я решил, если следующим образом.

  • Соответствующий код C # в основном 1-2 классов в сборке DLL
  • Определял интерфейс COM, который представляет собой подмножество интерфейса класса C # и реализовал этот интерфейс в классе C #. Таким образом, DLL стала в процессе COM-сервере.
  • Реализовано Node.js Расширение DLL, которая создает мою C # COM-класс с использованием стандартных вызовов Method Win32 COM API и маршрутов из Node.js JavaScript на код C # с использованием интерфейса COM.

Это решает проблему, если человек хочет сделать звонки в одном направлении. У меня также было требование сделать звонки от C # на JavaScript. Это намного сложнее. Нужно:

  • Реализуйте COM-объект в Node.js Расширение DLL (ATL помогает здесь)
  • Передайте ссылку на интерфейс этого COM-объекта к C # код (COM Interop)
  • Маршрутные звонки через COM-объект на объекты V8 в Node.js

Может быть, если у меня будет дополнительное время, я мог бы сделать пример проекта из этого.

.NET Addons можно записать, в короткие сроки вы пишете обычный нативный аддон и добавить .NET вызовы через CLI / C ++ вызовы на .NET DLL.

На практике вы обычно создаете библиотеку C # DLL, которые вы звоните из проекта Addon CLI / C ++ Addon. Существует несколько деликатесов, таких как обеспечение того, чтобы реальный узел добавить на файл определения файла определения скомпилирован без поддержки CLR, поэтому узел может загрузить его правильно.

Вы можете проверить: https://github.com/saary/node.net.net.Например, как это может быть достигнуто.

Следующий ответ устарел, но все же полезно для понимания Node.js из первого выпуска
Node.js теперь также доступен для Windows в Nodejs.org. Нет требований Cygwin или иначе.

Прежде всего, на данный момент нет родного порта Windows of Node.js, есть только версия Cygwin (но я подозреваю, что вы уже знали это).

Там был модуль узла, плавающий где-то в Githubs, которые обеспечили обертки для призвания в родных библиотеках, но IIRC, которые работали только с .so Libs.

Поэтому, если вы хотите использовать C # DLL, сначала придется написать нативное расширение Node.js в качестве интерфейса:
https://www.cloudkick.com/blog/2010/aug/23/raphy-nodejs-native-extsions/

Из этого расширения вы должны загрузить DLL и обернуть вызовы с Node.js в код C #, это означает, что вы должны написать какой-то код C / C ++ и преобразовать значения C # на V8.

У меня есть опыт работы только с C ++ и V8, это немного сложно начать, поскольку примеры кода немного редко, а также классы C ++ не тот тривиально. Но я написал маленький JS Game Engine, что использует Backend C ++ OpenGL, он незавершен (и вряд ли есть какие-либо комментарии), но это может дать вам некоторые идеи.

Примечание: В дикой природе есть некоторые проекты, которые обеспечивают несколько автоматическую генерацию обертков V8, но это только C ++ только.

Так что к выводу, я думаю, что это будет довольно приключенны, чтобы начать работу C #, чтобы работать, но это должно быть возможно.

Возможно, вам повезет С этим проектом, который является портом Node.js к .NET. Я не использовал это сам, но с собственной реализацией .NET вы теоретически сможете делать то, что вам нужно.

Вы также можете пойти пойти другому направлению и попробовать портировать (aka: перекомпилировать, если вы не подключены к Windows) Ваш игровой двигатель C # в моно и посмотрите, могут ли вы построить обертывающие устройства от этого.

Я знаю, что это старый вопрос, но хотел бросить текущий ответ. Поддерживаются WebSockets IIS 7.5 и .NET 4.x, хотя использование библиотеки сигнализации, скорее всего, будет путь наименьшего сопротивления. Это похоже на библиотеку Socket.io для Nodejs.

Что касается доступа к коду .NET через NODEJS, ваши лучшие параметры являются Edge.js, построение смешанной нативной сборки с C / C ++, подвергая ваш код .NET либо через приложение командной строки (лучше всего использовать трубы для ввода / вывода), либо через сервис (TCP или другой).

Я нахожу Edge.js, чтобы быть очень ограниченным, и не предлагая многое другое интерфейс консоли для трубопроводов. И почувствовать, что сервис может быть лучшим для более сложного интерфейса. В какой момент вы можете лучше всего делать остальную часть проекта в .NET, если только у вас нет инвестиций в Nodejs, которые заменяют указанные трудности.

Edge.js. Поддержка последних версий узла и .NET CORE с новым jeak-js. упаковка.

Поддержка Node.js 6.x, 7.x, 8.x, 9.x, 10.x, поддержка 11.x для .NET

Core 1.0.1 - 2.x в Windows / Linux / MacOS. Поддержка моно выполнения

4.8.x - 5.x.

Может быть установлен (npm i edge-js) от https://www.npmjs.com/package/edge-js.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top