準備實現乙個影象檢索系統,B S結構,不知道伺服器端的c 程式怎麼和web進行互動呢?

時間 2021-05-05 19:38:05

1樓:Eric Zhang

搭個web應用就行了,我用python的tornado搭建的,演算法呼叫c++封裝庫就ok了,有個簡單demo:搜包 還有乙個15w資料的鞋子檢索:搜鞋

2樓:

題主是要做乙個web應用,處理http協議最為方便的還是利用現有的web伺服器(nginx/lighttpd/...)。在此基礎上,需要用C/C++實現演算法邏輯的話,提供如下兩個思路:

1.用C寫乙個CGI外掛程式遷到http伺服器中,參考(Running a CGI written in C)

但這個真只能做demo,而且題主說需要預載入一堆資料配置之類的,這樣效率很低。

2.在Web伺服器和C檢索邏輯之間加一層指令碼處理層(php/python/...),做三層架構,

比如:http server --> php-cgi---> C伺服器

http伺服器和指令碼互動都有現有的協議(phpcgi/wsgi/...)。指令碼層負責處理一些簡單的頁面邏輯,可以當做view層吧。

在接收到上層http請求後,做簡單處理就可以把請求發給後端C檢索伺服器了。

核心檢索模組,採用C寫乙個伺服器,監聽上層的指令碼請求。伺服器模型最簡單的,開啟乙個監聽socket,然後開始while迴圈,accept到請求後,read出上游引數後,開始執行檢索邏輯(也就是題主已實現的演算法),將計算結果write出去,進入下一輪監聽處理...想做複雜,可以考慮多執行緒/程序/epoll,或用現有的一些高併發框架(libevent/...

)。那堆需要載入資料或者配置,只需要在C啟動的時候Init一次就行了。

至於指令碼層與C程序之間的互動協議,可以自己編寫簡單的協議,但更推薦用一些現有的RPC協議(protebuf/thrift/...)。如果後端有多個伺服器可供選擇的時候,一般用random或者round-robin就行,有特殊需要可以考慮一致雜湊。

注意定義好各層之間的輸入輸出

如果這套框架真的run起來了,題主以後只需要關心檢索模組的演算法部分就行,其他的頁面功能優化就交給php攻城獅去幹吧。後端服務hold不住了,直接加機器就行,如果覺得不夠優雅,再考慮加cache,或者優化網路模型等,根據瓶頸作調整。。。

如何實現乙個簡單的推薦系統

遇見更好的自己 問題應該是,如何把演算法進行編碼吧!第一,檢視你說的演算法在python中被打包模組,如果有直接研究這個模組,並且呼叫即可。第二,如果沒有,那就要自己寫,可以參考網上寫的,如果沒有,研究演算法框架,和資料流。根據資料流自己寫乙個。本質就是協同過濾演算法,網上有原始碼應該 最簡單的,比...

如何實現乙個簡單的家庭雲儲存(NAS)系統?

貝銳蒲公英異地組網 很多人都提到用黑群暉之類的方案自建NAS,實際上利用路由器USB介面外接硬碟也可以輕鬆滿足題主的需求,但是一般來說遠端訪問,外出隨時訪問資料會有些麻煩。儘管遠端訪問路由器硬碟的方法可以找到很多,但大多都需要公網IP,同時操作過程也非常複雜。要知道,如今不少網路運營商並不會主動分配...

準備買乙個安卓系統手機,有什麼高效能推薦?

勇敢做自己 個人推薦 1000左右價位的可以考錄紅公尺note7 和榮耀8 2000左右價位的可以考慮小公尺8 和魅族16 3000的話榮耀v20 力推 目前安卓效能最強無非就是麒麟980和驍龍845,優化的比較好,效能優先的有mate20pro,rog遊戲手機,努比亞紅魔遊戲手機,一加6T 但是驍...