2013-01-22 17 views
2

我已經用C++編寫了一些類。我用過OOP。現在我想在nodejs中使用這個類。我認爲可以這樣做:是否可以在nodejs中使用C++類?

  1. 在nodejs中創建C++類的對象並調用它們的方法。
  2. 調用編譯後的C++代碼,並獲取輸出。
  3. 與正在運行的已編譯C++程序(類似IPC的IPC)進行交互。
  4. 您喜歡的另一種方式。

哪種解決方案可行?

注:我已經看過nodejs-ffi模塊,但它似乎只使用內置方法。真的嗎?

讓我們假設我寫了這個:

namespace Math 
{ 
    class Aljebra 
    { 
     int Abs(int); 
    } 
} 
+1

我希望你已經檢查了C/C++插件上的nodejs文檔。 http://nodejs.org/api/addons.html –

+0

是的,我發現ffi但它不支持OOP,我想。 – JalalJaberi

+0

如果你的意思是爲我想在nodejs中使用的每個類編寫附加組件,它不是我想要的。但它是唯一的方法嗎? – JalalJaberi

回答

3

是的,它可以用你想到的所有方式。

  1. 您需要創建您的C++結合班的NodeJS,看到this questionherehere。如果性能不可忽略,則可能會發現像this one這樣的問題。無論如何,這是最快的方法。

  2. 調用代碼?我總是調用一個函數,但是如果您想知道如何使用像nodejs-ffi這樣的模塊,那麼使用它們與C++是相當痛苦的。所有函數名稱都以C++語言編寫,這意味着您的Math::Aljebra::Abs實際上可能被稱爲_ZN4Math7Aljebra3AbsEi,這取決於您使用的編譯器。如果您的圖書館主要包含extern "C"函數,則可用。

  3. 有很多這樣的庫。我更喜歡DBus。您可以使用它與許多系統守護進程進行通信。當然,如果你想用你的C++代碼,你需要編寫一個DBus服務來與之通信。

  4. 這取決於。如果你無法編譯,只使用現有的庫,第二個解決方案可能是唯一的解決方案。如果需要在C++庫中相互溝通多個nodejs實例,則第三種解決方案可能會更好。

+0

偉大的幫助!但這意味着nodejs本身沒有構建快速解決方案。如果這是真的,那麼我必須做更多的工作。謝謝 – JalalJaberi

0

我用的Node.js和C++像樣的數目seperately - 我斯波西我能看到的Node.js作爲服務器端語言和C++以非常傳統的方式成爲客戶端。然而,這樣做會使Node.js作爲客戶端語言(這是該語言的「熱門」功能之一)的強大功能 - 它可以同時執行這兩種功能。

此外,我不確定C++支持客戶端Web開發的東西。它是一種非常強大的語言,我相信它是可能的......但是我認爲在你計算出如何用Node.js實現C++的時候,你可能會重新編寫你想用C++調用的函數在Node.js或其他一些更合適的語言。

+0

你的意思是什麼?有沒有其他語言可以做到這一點? – JalalJaberi

+0

我的意思是C++不是Web應用程序的傳統客戶端語言;要使用C++運行的代碼,只需將其轉錄爲傳統的客戶端語言,可能會花費更少的時間。 – PinkElephantsOnParade

+0

首先,nodejs不是客戶端語言,javascript是。像derbyjs,meteor和towerjs這樣的流行框架是,它們序列化nodejs代碼,將其發送給客戶端並在客戶端進行評估。任何使用與系統資源交互的nodejs api的代碼都不適用於客戶端。有一種方法可以在客戶端上運行本機代碼。將它們包裝成一個插件。我不知道它是如何可行地生成這樣的代碼。其次它構成安全威脅。用戶理想情況下不應該允許任何不是來自可信來源的插件運行。 –

相關問題