2012-08-17 15 views
7

Tengo un código C++ que quiero exponer al lado del cliente de una aplicación web. Idealmente, quiero escribir objetos de envoltura de JavaScript para mis clases de C++ para que pueda usarlos en el lado del cliente.Javascript C++ vinculante?

¿Se ha hecho esto antes ?. ¿Alguien tiene un enlace para mostrar cómo se puede lograr esto?

+0

¿Este código C++ está en el servidor? Si no es así, ¿cómo lo está logrando con el cliente? –

+0

Creo que está hablando de RMI. Sería objetos Javascript autogenerados en el cliente que hablan con código C++ en el servidor con algún mecanismo de serialización que no tiene que escribir. –

+0

@JohnWatts: Sí, tienes razón, es efectivamente RMI. La biblioteca C++ existirá en el servidor y las clases Javascript proporcionarán una API para interactuar con la biblioteca back-end. –

Respuesta

1

Hay una biblioteca para convertir código C++ para Javascript, que podría ayudar: envoltura basada plantilla emscripten

+0

Sí, descubrí esto ayer. Lo he descargado y he comenzado a experimentar con él. Parece que es el camino a seguir. –

+0

¿Sigue siendo esta la biblioteca preferida, o hay enfoques más modernos que recomendaría? Me pregunto qué está usando @HomunculusReticulli hoy en día también. La única actualización que veo en esta pregunta fue en '14, mencionando v8bridge en github. –

+1

@kayleeFrye_onDeck: Terminé usando emscripten. HTH –

0

Creo que quieres un analizador C++ JSON. Debería poder encontrar uno aquí http://www.json.org/. Es posible que no haga todo lo que desee porque solo serializa y deserializa objetos C++ sin ningún tipo de comportamiento, pero debería ser lo suficientemente bueno. Ver https://stackoverflow.com/questions/245973/whats-the-best-c-json-parser para una discusión.

+0

hm, JSON implementa solo los datos intercambiados entre los dos componentes. Creo que OP está hablando de una exposición/interfaz fácil de usar. – Constantinius

+0

@JohnWatts: ese es un buen punto de partida, pero no sé si se adapta a lo que estoy tratando de hacer, que es ejecutar un script en el navegador, lo principal es que el script usará el "envuelto" Objetos C++. –

+0

@Constantinius: sí, entendiste lo que estaba diciendo (¡mientras lo escribía!) –

0

Si el código C++ tiene que estar en el cliente, entonces no hay una manera simple de hacer esto para una aplicación web. Una solución puede incluir complementos de codificación para los navegadores que desee admitir, a los que luego se puede acceder desde el código de JavaScript.

Si, por ejemplo, necesita esto para una aplicación cliente, ese es otro caso. Tal cosa se ha hecho e implica vincular su aplicación a (o ejecutar desde el exterior) con, por ejemplo, la biblioteca de cromo, o cualquier otro motor de ejecución de JavaScript. De esta forma, puede crear enlaces a clases de C++ y usar dichos objetos desde javascript y viceversa. Tenga en cuenta que esta tampoco es una solución trivial y puede ser un gran esfuerzo de implementación (también requiere recursos adicionales).

0

Podría, por ejemplo, ajustar las clases de C++ en PHP o Python, y luego implementar una API sobre HTTP para acceder a las funciones requeridas.

O si insiste en exponer las funciones como JavaScript, puede intentar usar Node.js y crear un complemento C++ para envolver sus clases. Consulte la documentación de Node.js aquí: http://nodejs.org/api/addons.html#addons_wrapping_c_objects

Pero de cualquier manera, no creo que evite crear algún tipo de API (HTTP SOAP, XML RPC) para acceder a las funciones de su servidor.

+1

¿Por qué utilizar un lenguaje/framework adicional? Estoy seguro de que hay un enfoque más directo posible que usar otra dependencia. – Constantinius

+0

Acabo de mencionar PHP y Python porque creo que es más fácil mapear clases de C++ en PHP o Python que en JS. – nutrina

+0

¿De qué sirve mapear clases para PHP/Python cuando las necesita en JavaScript? – Constantinius

0

Supongo que RPC es lo que quiere. Tendrá que ajustar sus funciones en el lado del servidor utilizando algún tipo de marco. Todavía no lo he usado, pero this one parece prometedor.

En el lado del cliente utiliza objetos proxy para despachar las llamadas a funciones. La comunicación se maneja generalmente a través de XML-RPC o JSON-RPC. Usé this client side framework y estaba bastante contento, pero estoy seguro de que va a find many others.

1

Libjspp C++ para incrustar y que se extiende en Javascript motor spidermonkey 1. 8. 5 y más

SpiderMonkey? es el motor Javascript/ECMAScript de Mozilla Project.

¿Libjspp permite a los desarrolladores de C++ incrustar SpiderMonkey? simple y fácil en sus aplicaciones. Libjspp permite ejecutar múltiples motores de Javascript dentro del mismo proceso, que se adapta a un motor por hilo para el código de barras, lo que es útil para lograr un verdadero paralelismo. Además, Libjspp no ​​impide que el usuario ejecute varios subprocesos dentro del motor.

http://code.google.com/p/libjspp/

+0

libjspp parece ser un repositorio de Git vacío. – jjrv

1

Ésta es una vieja topi, sin embargo, yo estaba en la situación exacta en este momento, y todas las soluciones que he encontrado en la complicada red o anticuado.

Recientemente, encontré una biblioteca que admite el motor V8 (incluida la nueva API de aislamiento, que hace que el 90% de las bibliotecas que encontré desactualizadas) y proporciona una API de gran exposición e interacción.

https://github.com/QuartzTechnologies/v8bridge

espero que mi solución ayudará a nadie.

0

Aunque no es exactamente QML Javascript, Qt no es normal C++, pero lo que hacen juntos parecen al igual que lo que necesita

1

Hay una relativamente nueva biblioteca para hacer esto llama nbind. Tal vez eso te conviene? Me parece muy bueno, y estoy a punto de comenzar a usarlo.

+0

Bien, gracias por el aviso. Lo veré más tarde cuando tenga algo de tiempo. –