簡體   English   中英

節點和C應用程序之間的進程間通信

[英]Inter-process communication between node and C application

我有2個軟件組合我想互相交談,

  1. node.js Web應用程序
  2. 一個用C編寫的專用服務器(一段相當簡單的代碼,處理一些我不想用其他語言包裝的模糊庫)

我想要的對話非常簡單,

  • 節點:設置資源ID A.
  • C app:好的,這是ref num

要么

  • 節點:記下這個參考
  • C app:當然,伙伴。

是否有任何無痛的方式在2之間傳遞消息?

我的理論觀點目前是這樣的:

  1. 在2個進程之間有1個tcp / unix套接字,1個會話只是為了避免一直打開和關閉會話(也擔心一次會有太多)。
  2. 每個匹配的節點請求和C app響應具有相同的ID(單個tcp會話上的tcp-esque會話)
  3. 每個相關的節點請求都會向C app生成消息,將響應對象存儲在某個散列中,會話ID作為鍵。
  4. 有一個節點線程來收集C app回復,按會話ID查找響應對象並響應客戶端

這非常低效嗎?

節點中是否有實際的線程支持? (一個簡短的谷歌沒有帶來任何具體的結果)

基本上你是在正確的方向,你需要某種進程間的通信。 這取決於你的IPC有多復雜。 如果它只是調用方法並在方法之間共享簡單(即整數,字符串)數據,那么你可以使用unix套接字,這些套接字很容易實現,並且本身由nodejs支持,並且很容易在C中使用好吧(因為所需的標題幾乎總是可用的)

ZeroMQ為您提供傳輸抽象(允許IPC或真正的基於網絡的傳輸)以及針對甚至模糊語言的大量綁定。 C和Node提供的示例應該讓您立刻前進。 但是,您需要相應的標頭和庫; 最有可能需要先建立。

如果您要在程序之間交換的數據將更復雜(讀取結構或數組,嵌套對象),那么您將需要一些真正的RPC實現。 那里有一堆RPC實現; 功能方面,Apache Thrift看起來很有希望,但最終我無法在合理的時間內構建thrift編譯器。

所以最后,對於我來說,有一個相似的用例,我最終使用ZeroMQ進行傳輸抽象,最后使用JSON-RPC作為RPC機制。 JSON-RPC非常適用於nodejs,而CI則使用https://github.com/pijyoi/jsonrpc ,它基於ZeroMQ和Jansson構建。 文檔是不存在的,但如果你走得那么遠,你不應該害怕。

性能方面我不認為這會成為一個問題; 你的用例聽起來不會,就像你在很短的時間內有很多要求一樣。 由於ZeroMQ還提供傳統的IPC作為傳輸,您也可以使用它來提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM