Pregunta

Tengo un proyecto mascota que es un juego en línea, todo el motor de juego está escrito en C # y me gustaría saber si hay alguna forma de llamar a las funciones de este montaje existentes (.dll) de una solución construido usando Node.JS, Socket.IO, expreso, etc?

El motor del juego en sí es bastante completa; probado y robusto. Estoy esperando que hay alguna manera ordenada de exponer su funcionalidad sin demasiado trabajo.

Actualizar

Para responder a mi propia pregunta un poco .. He terminado la construcción de mi propio servidor websocket (basado en el documento de protocolo más websocket actual). Está escrito en C # y compilado usando Mono para que pueda ser alojado en una caja de Linux corriendo mono y por lo tanto (con algunos retoques) Puedo usar mi motor de juego existente.

ACTUALIZACIÓN 2 Un proyecto que hace exactamente lo que estaba buscando originalmente existe ahora - http://tjanczuk.github.io / EDGE / # /

ACTUALIZACIÓN 3 Edge.js de apoyo últimas versiones de nodo y el núcleo .NET con un nuevo borde-js paquete.

Soporte para Node.js 6.x, 7.x, 8.x, 9.x, 10.x, 11.x Soporte para .NET Core 1.0.1 - 2.x en Windows / Linux / MacOS. Soporte para el tiempo de ejecución Mono 4.8.x -. 5.x

Se puede instalar desde https://www.npmjs.com/package/edge-js

¿Fue útil?

Solución

Si lo único que quiere hacer es giro de un servidor HTTP ligero al mismo tiempo la programación con C # y .Net deben darle una oportunidad kayak. Es un servidor HTTP ligero para C # y se comporta un poco como Node.js en ese sentido.

kayakhttp

Actualización:

Si usted está buscando un ligero servidor HTTP de las peticiones web de mango que tiene un par de opciones hoy:

  • ServiceStack (recomendado)
  • Microsoft WebAPI
  • NancyFx

A mi entender todo el trabajo anterior sobre alguna versión de Mono, lo que aún puede albergar ellos a través de ambos sistemas basados ??en Windows y Unix.

Otros consejos

Vea las edge.js proyectan empecé ( http://tjanczuk.github.com/edge). Se proporciona un mecanismo para el funcionamiento de .NET y Node.JS código en proceso. Edge.js le permite llamar a código .NET de Node.js Node.js y código de .NET. Se calcula las referencias de datos entre .NET y Node.js, así como reconcilia los modelos de roscado entre múltiples subprocesos CLR y única V8 roscado.

El uso de edge.js se puede acceder a las islas de preexistente código .NET de Node.js, que parece coincidir con su escenario.

Me han enfrentado recientemente con el mismo desafío (obligación de llamada C # código de Node.js JavaScript). Tenía 1000s de líneas de código C # compleja que realmente no le gustó al puerto de JavaScript.

He resuelto si la siguiente manera.

  • El código C # relevante es básicamente 1-2 clases en una DLL de conjunto
  • Definido una interfaz COM que es un subconjunto de la interfaz de la clase C # de e implementó dicha interfaz en la clase C #. Por lo tanto, el DLL se convirtió en un servidor COM en proceso.
  • Se implementó un archivo DLL de extensión Node.js que instancia mi C # COM clase utilizando estándar de Win32 API COM y rutas de llamadas a métodos de Node.js JavaScript para C # código usando la interfaz COM.

Esto resuelve el problema si sólo se quiere hacer llamadas en una dirección. También tuve la necesidad de realizar llamadas desde C # a javascript. Esto es mucho más difícil. Uno tiene que:

  • Implementar un objeto COM en el archivo DLL de extensión Node.js (ATL ayuda aquí)
  • pasa una referencia de interfaz de este objeto COM a C # código (interoperabilidad COM)
  • Enrutamiento de llamadas a través del objeto COM al V8 objetos en Node.js

Tal vez si tengo algo más de tiempo, yo podría hacer un proyecto de ejemplo de esto.

.Net complementos pueden ser escritos, en suma se escribe un complemento nativo regular y añadir llamadas a través de CLI .Net / C ++ llamadas a .Net dlls.

En la práctica, por lo general, crear una biblioteca DLL de C # que luego se llama desde un nodo C ++ complemento del proyecto / CLI. Hay un poco de delicias tales como asegurarse de que el complemento nodo actual en el archivo de definición se compila sin el apoyo de CLR lo que el nodo puede cargar correctamente.

Se puede extraer: https://github.com/saary/node.net para un ejemplo de cómo esto puede lograrse.

La siguiente respuesta está fuera de fecha, pero todavía útil para la comprensión de Node.js del primer lanzamiento
Node.js ahora también está disponible para Windows de forma nativa en nodejs.org. No hay requisito de cygwin o de otra manera.

En primer lugar, por el momento no hay ningún puerto de Windows nativa de Node.js, sólo hay una versión cygwin (pero sospecho que ya lo sabía).

Hubo un módulo de nodo flotando en algún lugar en el que GitHubs proporcionado envolturas para poner en bibliotecas nativas, pero IIRC, que sólo funcionaba con libs .so.

Por lo tanto, si desea utilizar una DLL de C #, que primero tendrá que escribir una extensión Node.js nativa como la interfaz:
https://www.cloudkick.com/blog / 2010 / ago / 23 / escritura-nodejs nativo-extensiones /

A partir de esa extensión tiene que cargar el archivo DLL y envolver las llamadas de Node.js en el código C #, que significa que tiene que escribir algunos valores de bajo nivel de C / C ++ de código y convertir C # a V8 cosas.

Sólo tiene experiencia con C ++ y V8, que es un poco difícil empezar desde los ejemplos de código son un poco escasa, también envolver clases de C ++ no es que trivial. Pero yo escribí pequeño motor de tipo JS juego de cosas , que utiliza un motor de C ++ OpenGL, es sin terminar (y casi no hay comentarios) pero podría darle algunas ideas.

Nota:. Hay algunos proyectos en el medio natural que proporcionan tanto la generación automática de las envolturas a V8, pero esos son C ++ solamente

Para concluir, creo que va a ser bastante aventurero conseguir las envolturas de C # para trabajar, pero que debería ser posible.

Es posible que tenga un poco de suerte con este proyecto, que es un puerto de Node.js a .RED. No he utilizado yo mismo, pero con una aplicación .NET nativo que teóricamente debería ser capaz de hacer lo que necesita.

También puede ser que desee ir en otra dirección y tratar de puerto (también conocido como: recompilación a menos que seas profunda enganchado en Windows) su motor # juego de C a Mono y ver si usted puede entonces construir envoltorios fuera de eso

Yo sé que es una vieja pregunta, pero quería lanzar en una respuesta actual. Con IIS 7.5 y .Net 4.x websockets son compatibles, aunque el uso de la biblioteca SignalR probable que sea el camino de menor resistencia. Es similar a la biblioteca para socket.io NodeJS.

En cuanto al acceso a través de código .Net NodeJS, son sus mejores opciones Edge.js, la construcción de un montaje mixto autóctono con C / C ++, exponiendo su código .Net ya sea a través de una aplicación de línea de comandos (mejor utilizar tubos para entrada / salida ) oa través de un servicio (TCP o de otro tipo).

Me parece Edge.js a ser muy limitado y no ofrece mucho más de una interfaz de consola .. entubada y sentir que un servicio puede ser mejor para una interfaz más compleja. Momento en el que puede ser mejor haciendo el resto del proyecto en .Net, a menos que tenga una inversión en NodeJS que remplaza dijeron dificultades.

Edge.js apoyo de últimas versiones y el núcleo .NET con un nuevo borde-js paquete nodo.

Soporte para Node.js 6.x, 7.x, 8.x, 9.x, 10.x, 11.x Soporte para .NET

Core 1.0.1 - 2.x en Windows / Linux / MacOS. Soporte para el tiempo de ejecución Mono

4.8.x -. 5.x

Se puede instalar (npm i edge-js) de https://www.npmjs.com/package/ borde-js

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top