2012-05-02 1 views
7

Sto lavorando all'app in cui è necessario passare messaggi tra un'applicazione C++ e un'applicazione Web Javascript.Esiste un'API di comunicazione tra processi di alto livello implementata sia in C++ che in Javascript

Certamente potrei scrivere il codice socket in entrambe le lingue e l'ho fatto in passato quando necessario.

Quello che mi piacerebbe davvero è un messaggio di livello superiore che registra o l'API di accodamento messaggi fa un sacco di lavoro per me. Qualcuno sa di una tale API?

Ho guardato ICE e non sembra avere collegamenti Javascript. Ho anche guardato la coda dei messaggi Boost, ma si rivolge solo al lato C++ delle cose. Se necessario, potrei lanciare i miei binding Javascript per una di queste tecnologie.

AGGIORNAMENTO: Spiacente dovrei averlo menzionato prima, voglio eseguirlo in un browser.

Per fornire una storia più completa, quello che voglio è una semplice applicazione basata su browser che viene utilizzata per configurare e visualizzare la registrazione per un'applicazione C++.

So che ci sono altri modi per farlo, ma sono interessato in particolare a una libreria di alto livello sia in C++ che in Javascript basata su browser che crea una coda di messaggi ontop dell'API socket (se non ce n'è una quindi potrei prendere in considerazione l'implementazione di me stesso e scrivere un articolo di progetto di codice).

ANCHE: non sono preoccupato della portabilità in termini di browser web. Ad esempio, se esiste una libreria Javascript di alto livello di IPC che funziona solo in Chrome, ne sarò felice.

+0

È nel browser o sul lato server js? Quale ambiente? – joshp

+1

Le tue scelte sono fondamentalmente JSON/HTTP, XML/HTTP o qualcosa che usa WebSockets. –

risposta

2

Ho trovato una soluzione che soddisfa le mie esigenze. Non è esattamente perfetto, ma penso che funzioni abbastanza bene.

Alcune persone hanno suggerito di utilizzare HTTP e Ajax. Questa si è rivelata un'idea utile e dopo alcuni prototipi penso che risolva i miei bisogni piuttosto basilari.

Per essere più specifico, sto utilizzando il server HTTP Mongoose incorporato nella mia applicazione C++ e sto utilizzando la funzione jQuery ajax per estrarre i dati dal server. Il client jQuery interroga continuamente il server per i nuovi dati, non particolarmente efficiente, ma penso che farà il lavoro abbastanza bene per me.

Una volta completata l'implementazione, scriverò un articolo che spiega come farlo in dettaglio e quindi aggiornerò questa risposta.

+0

Nel caso qualcuno fosse interessato, ho scritto un articolo sul progetto di cui stavo parlando in questa domanda/risposta. http://www.codeproject.com/Articles/448756/Introducing-Investigo-Using-a-Proxy-DLL-and-embedd –

4

Per rispondere semplicemente alla tua domanda: No, non vi è alcun IPC implementato in ECMAscript out of the box.

Ma in realtà hai già risposto alla tua domanda. Se provi a comunicare con Javascript che gira in un browser, dovresti effettivamente usare le connessioni (web-) socket alla data del pipe in entrambe le direzioni. Ovviamente potresti scrivere un semplice server HTTP in C++, ma suppongo che sia eccessivo e non abbia le capacità di socket bi-direzionali.

È ancora un po 'di lavoro implementare una connessione web-socket in C++ da zero (le specifiche erano in flusso per un lungo periodo), ma immagino ci siano già alcuni librarys.

Se si sta tentando di comunicare con node.js, questo è un compito quasi banale utilizzando socket/pipe reali.

+0

Non sono inclusi i websocket (un metodo di IPC) (almeno in alcuni browser) fuori dalla scatola? –

+0

In che modo XMLHttpRequest non soddisfa la definizione di IPC? È anche una buona base per un'interfaccia RPC. – Potatoswatter

+0

@jAndy È ancora del lavoro implementare da zero i socket Web in C++? Ci sono risorse che consigli e sarebbero utili per raggiungere questo obiettivo? – Greg

4

Con JavaScript, suppongo che lo stiate eseguendo in un browser? In questo caso, l'applicazione C++ deve fornire un server Web e un tipo di servizio web basato su JSON che è possibile chiamare. Sul lato JavaScript è sufficiente utilizzare AJAX per comunicare con quel servizio web.

Un'alternativa sarebbe una web socket che potrebbe essere un po 'più difficile da implementare sul lato C++.

+0

Sì, eseguirlo nel browser. Le prese sul web sono ciò che sto pensando che userò nel Javascript. –

+0

Potrebbe diventare complicato. A seconda di quali versioni del browser si desidera supportare, è necessario implementare fallback poiché non tutti hanno il supporto completo per WebSocket. Fondamentalmente avrete bisogno di http://socket.io ma per C++ invece di NodeJS. Il webservice funzionerà ovunque e anche con client diversi da JavaScript. – Daff

0

Per un'implementazione lato server o non browser, che dire delle pipe denominate?

Sì, è una tecnologia vintage e l'utilizzo dipende dal sistema operativo in uso, ma finché l'ambiente js del server è in grado di leggere e scrivere file, potrebbe funzionare e si adatta alla descrizione "di alto livello" dell'interprete comunicazione.

+0

Aha, è basato sul browser, per l'aggiornamento, quindi la mia risposta non si applica. – joshp

1

Si può provare DBus, ha un meccanismo molto semplice per definire, interrogare e utilizzare le interfacce, e ci sono alcuni componenti per i browser basati su XPCOM e webkit (ad esempio http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge e http://code.google.com/p/v8-dbus/). Anche DBus è opensource e multipiattaforma.

+0

Grazie. Sembra interessante, ci penserò. –

+0

Non penso che questo farà ciò che vuole. Penso che voglia che l'app web parli alle applicazioni sul suo server, non alle applicazioni sulla stessa macchina locale del browser. Funzionerà solo se il browser e l'app C++ si trovano sulla stessa macchina. (DBus è uno schema di comunicazione locale). –