最近工作中遇到的一個場景,php項目中需要使用一個第三方的功能,而恰好有一個用寫好的類庫。那么問題就來了,要如何實現(xiàn)不同語言之間的通信呢?下面就來一起看看吧?! ?、將經過較多封裝,做為php擴展。但文中的需求是php與通信。即php要傳數(shù)據(jù)給,同時也必須把執(zhí)行結果返回給php。 在PHP中管道的使用popen,具體就不展開說了,因為此方法解決不了文中的問題。 通過對比測試,計算出各個流程占用的時間。
php和go語言哪個好
前言我在最近的工作中遇到一個場景,一個php項目中需要一個第三方函數(shù),恰好有一個類庫是用。那么問題來了,如何實現(xiàn)不同語言之間的交流?讓我們一起來看看吧。常規(guī)方案1。寫一個http/TCP服務,php通過http/TCP互相通信。2.它將被封裝成php的擴展。3.PHP通過系統(tǒng)命令檢索可執(zhí)行文件的問題。1.http請求,網絡I/O會消耗很多時間。2.大量的代碼需要打包。3.PHP每次檢索一個程序,都需要一次初始化,耗費大量時間。1.程序只初始化一次(因為初始化很耗時)。2.所有請求都不需要通過網絡。3.盡量不要修改代碼方案。1.簡單封裝。將第三方類庫編譯成可執(zhí)行文件。2.PHP以及通過雙向管道通信使用雙向管道通信的優(yōu)勢。1.原始類庫只需要一點封裝。2.性能最好(IPC通信是進程間通信的最佳方式)。3.不需要網絡請求,節(jié)省了大量時間。4.程序只需要初始化一次。并將其保存在內存中,以實現(xiàn)最初的調用demo main(“fmt”)。com//")func main(){ x =。()x.free () s = "小明畢業(yè)于中科院計算所,后留學日本京都大學" words=x.(s,true) fmt。("/")}將文件另存為main.go,就可以運行2 funcmain () {x =。("/data/tmp//jieba.dict.utf8帶調整后的代碼main ("bufio ""fmt " ")。com//"io" "OS " ")。"/data/tmp//user . dict . utf8 ")deferx。Free()=bufio。(os。Stdin ),錯誤=。(' n ')ifer!=nil&&err==io。EOF{break}s=。(s)如果!=""{words=x.(s,true)fmt。(.Join(words," ")} else {fmt。(" getempty n")}}只需要幾行簡單的調整就可以從標準輸入中接收一個字符串,然后輸出test # gobuildtest #..輸入“這是一個測試”#這是一個測試//程序3用cat和communication做一個簡單的測試//準備一個title.txt,帶一行文字#cattitle.txt|。/test正常輸出表明cat已經能夠與正常的4PHP進行交互,并使用單向管道與cat進行通信,如上所示。也就是數(shù)據(jù)只能從cat傳入,輸出的數(shù)據(jù)不傳回cat,而是直接輸出到屏幕上。但是本文的要求是php和通信。也就是php必須將數(shù)據(jù)發(fā)送給,同時必須將執(zhí)行結果返回給php。因此,有必要引入雙向管道。PHP中popen("/path/test ")的使用就不詳細討論了,因為這種方法解決不了文中的問題。雙向管道$=array(0=>array("pipe "," r "),1=>array("pipe "," w")) $ = ('/go/src/test/test ',$,$pipes)($pipes['0'])同時返回一個雙向管道的數(shù)組。php將數(shù)據(jù)寫入$pipe['0'],并從$pipe['1']讀取數(shù)據(jù)。你可能已經發(fā)現(xiàn)了,我是標題文件,這里的重點不僅僅是PHP和如何通信。相反,它引入了一種讓任何語言通過雙向管道進行交流的方法。(所有語言都將實現(xiàn)管道相關的內容。)測試通過對比測試,計算每個流程所用的時間。下面提到的title.txt文件包含100萬行文本。每行文字取自b2b平臺。產品標題1全程耗時14.819秒。耗時包括process cat讀取文本,通過管道將數(shù)據(jù)傳輸?shù)教幚頂?shù)據(jù),并將結果返回到屏幕2。計算分詞函數(shù)需要時間。去掉方案的分詞函數(shù)調用,也就是注釋掉代碼timecattitle.txt |,需要1.817秒。源代碼中的/test >/dev/null。消耗的時間包括process cat讀出文本和通過管道將數(shù)據(jù)傳入處理數(shù)據(jù)。將結果返回到屏幕上。分段時間=(第一步需要時間)-(上面的命令需要時間)。分段時間為14,81,-1,81,=13.002秒。3測試cat進程之間的通信時間。timecattitle.txt>/dev/null耗時0.015秒。經過的時間包括process cat讀取文本和發(fā)送數(shù)據(jù)以通過管道處理數(shù)據(jù)。將結果返回到屏幕上。管道溝通需要時間(第二步需要時間)-(第三步需要時間)。管道通信需要1,81,-0,01,=1.802秒。4 PHP和通信的時間消耗。寫一個簡單的PHP文件數(shù)組(" pipe "," r "),1=>array("pipe "," w")) $ Feof($fp)){($pipes['0'],trim (fgets ($ FP))。" n") echo fgets ($ pipes [1])