2014-07-15 115 views
3

我有兩個應用程序 - 一個php web應用程序和c程序。 PHP應用程序必須將數據發送到返回結果的c程序。因爲它必須保存先前輸入的數據在內存中。在c和php之間傳遞數據

我處理在c和php之間傳遞數據的問題,通過使用文件(輸入&輸出文件) 如果我的web應用程序發生變化,我的php腳本會更新一個文件,這個文件會被我的c程序讀取,輸出被寫入另一個文件中,web應用程序正在隨時查找變化。

我認爲這不是解決這樣的問題,最聰明的解決方案。Probaly其很多沒有必要的文件訪問。

隨着Inspira的從後面的線程,我認爲使用一種C PHP服務器橋樑可能是一個很好的解決方案。

How to pass value and run c program in php(web application)

Passing data between PHP and C executable in linux

我已經開始與mongoose。 Mongoose是一個非常輕量級的網絡服務器。 我目前的想法是,我的Web應用程序將通過POST直接發送數據到我的C程序。該請求由貓鼬網絡服務器處理。 這是要走的路嗎?或者更好的解決方案將它分成兩個應用程序 1)處理輸入輸出的網絡服務器 - 兩個程序之間的變量通過共享內存傳遞 2)我的當前用於我的操作的c程序(通過共享內存輸入/輸出)

或者這是完全錯誤的方式和a)我應該堅持我的文件解決方案b)有一個更好的方法? 我很抱歉,所有這些問題,但我很新的C和鬥爭了很多,並沒有感到真正有信心與這一切。

編輯
我嘗試更加具體的我的C程序做什麼。基本上它是一個模擬。它就像一個具有大約20-40個輸入的狀態流,它們都是整數,大部分時間只是0或1.程序作用於輸入和以前狀態的基礎上。通過將輸入文件更改爲原點狀態,一次迭代後重置輸入。

輸出文件被更新所有的時間與對應的輸出值(像VAR = 1個VAR2 = 3)

+0

您是否遇到併發問題?如果多個PHP請求同時發生會怎樣?什麼能防止請求在C程序運行時相互干擾? –

+0

不是,應用程序只需要一次處理一個請求只有一個用戶輸入狀態。 輸出對每個人都是一樣的。 我想過這個問題,如果有必要處理不同輸入的不同會話。基本上我需要爲每個模擬一個新的c程序實例。因爲我沒有任何想法來處理這個問題,所以我堅持使用我目前的解決方案。 – jonas

+1

由於我最近在使用ZeroMQ,所有提供的建議中,我會建議在C程序端(或輪詢機制)使用帶有事件循環的ZeroMQ。在PHP中使用JSON解碼數據,使用ZeroMQ將消息壓入C程序。 C程序充當服務器,並在有數據要在PULL ZeroMQ套接字上讀取時作出反應。它讀取消息,解碼JSON,確實有效。任務完成。需要吸收很多,但C和PHP端的實際代碼將非常小,但是完全最優。 –

回答

1

可以使用DBMS進行數據共享。

+0

謝謝你的想法,我必須分享的數據只有int(大部分時間只是0/1),也可能是大約40個變量。 我認爲一個dbms會很多,我沒有看到文件基礎解決方案的巨大差異(期待我不需要的管理方面) 我會嘗試編輯我的文章,以更具體什麼c程序確實。 – jonas

0

我會開發這個C程序爲SOAP WebService,這樣它可以被執行一次並等待請求。 (或者最終以CGI模式工作,並在需要時執行)

您的PHP腳本(使用SOAP library)可以從您的程序調用一個C函數並接收它的結果。所有數據如函數參數,對象等都是使用XML語法在不同語言之間交換的。

我曾經在PHP,C和Python之間建立過通信,但它工作正常。我用gSOAP。我正式用於C++,我知道這不是正確的方式,但是你可以混合它們,因爲它們是兼容的。

+0

謝謝你的想法。我認爲這將是一個好方法。但我認爲它有點沉重。 如果我會使用其他語言,例如我會爲它去。使用c它看起來耗時且比例如複雜。貓鼬或特別是ZeroMQ – jonas