Re: [問題] 如何讀取外部傳進來的參數?

作者: hn12404988 (Willy)   2016-08-31 11:11:53
※ 引述《gn00618777 (非常念舊)》之銘言:
: 我知道在 main(int argc, char*argv){
: }
: 可以傳外部參數進去例如 xxx.exe "參數"
: 但如果我在 main 裡面有一個無窮迴圈 while
: while 裡面我該如何獲得外面傳進來的參數呢??(假設這個無窮迴圈不能read file)
: 短時間內想不出來="=
: 謝謝指教
我把我自己伺服器用的TCP and Unix domain Socket IPC整理在github上
https://github.com/hn12404988/Neural_Socket
這個專案的目的是「輕量,高效,穩定」的IPC,所以選擇TCP socket 和 Unix Domain
另外目前只有在Linux上測試而已,OSX我猜應該沒問題,windows可能就要改寫一些地方
server特色:
每個connection有自己的thread獨立運作,意思就是,一個server可以被好幾個client連接
每個thread接收自己的訊息,不會在開thread處理,所以處理完這個訊息回覆後,才會處理
下一個進來的訊息,如果connection被client關掉或是不明原因中斷連線,server會自己回收
掉那個thread
client特色:
一個client可以同時跟好幾個server保持連線,需要設定一個最大連線數,如果滿了之後,
又有新的server要連線,client會關掉最少用的連線,然後加入新的。
除了傳統的「傳送然後接收」,還有「射後不理」,就是client發送訊息後,就開一個新的
thread自己去接收不重要的回覆,不會影響main thread運作。
「射後不理」不用擔心如果server處理太慢,或是client射太快,server有可能一次把兩次
的訊息一次讀取進去,因為client如果知道上一個「射後不理」還沒收到server的回傳
client會把新的訊息先存起來,等到上一個回來了,就會把訊息在馬上送出去
Note:
可以看得出來,server不管怎樣一定要回傳訊息,不然會拖慢到client的速度,雖然最終
client都會放棄沒有訊息回傳的溝通,但會嚴重影響效能。
其他細節請看example檔案,自己compile跑看看,如果有問題請在跟我說,或github上issue
作者: steve1012 (steve)   2016-08-31 11:44:00
蠻多raw pointer 都用C++11 應該可以減少一點感覺命名可以稍微改一下 可讀性較好 像jkl vector 另外感覺你非常多vector 可以考慮把一些東西包起來像是ip_list port_list等 用個ds包起來可能比較好理解多提供點abstraction 讓使用者能了解high level idea然後jk 這種變數實在太多了xD 感謝你花時間貼上來 很厲害
作者: hn12404988 (Willy)   2016-08-31 12:13:00
raw pointer有點個人怪癖,有點難改,jk是指什麼?你是指我用來記數的int j,k嗎?不然就要改成在function裡宣告,這樣每次執行都要再配新記憶體位置會影響到一丁點效能就是了,習慣要用的東西先全部宣告
作者: Caesar08 (Caesar)   2016-08-31 12:31:00
又不是用new出來的,i j k這種放for loop裡面就好然後你居然在socket_client.h裡面include cpppimpl學一下,就不用include那麼多header然後寫C++的話,pointer幾乎都用不到都用c++11,unique_ptr會比較好
作者: hn12404988 (Willy)   2016-08-31 12:37:00
感謝,我不知道pimpl,我都這樣include而已,等等去查raw pointer實在是個人怪癖,我控制欲對pointer很強
作者: Caesar08 (Caesar)   2016-08-31 12:40:00
然後你的inline應該用錯了
作者: askacis (ASKA)   2016-08-31 13:14:00
Linux 上用 socket做IPC,不用domain socket而用tcp的理由是?
作者: hn12404988 (Willy)   2016-08-31 14:26:00
有domain socket的,這是我從我自己用的分割出來的TCP比較通用,就把TCP的分割出來inline我真的是亂用,因為我上次查,比較新compiler會自己判斷要不要inline是否會加快效能,不是人決定的所以inline就隨便寫
作者: askacis (ASKA)   2016-08-31 18:12:00
不過unix domain socket理論上效率會比tcp socket好,不過不知道新版kernel是不是有對loopback最佳化
作者: hn12404988 (Willy)   2016-08-31 18:48:00
之後再花一些時間整理,把unix socket也加到這專案
作者: steve1012 (steve)   2016-08-31 21:09:00
Raw pointer 除了更危險一點看不出來有啥差別....你這裡面有哪件事情是shared Ptr做不到的嗎簡單來說就是要寫給別人用的東西這樣寫有點糟 當然要是自己用可能沒差用的人哪知道jkl是什麼 會影響到什麼
作者: hn12404988 (Willy)   2016-08-31 22:05:00
沒寫過給別人,看來這些習慣要改一改,之後順便用一般i,j,k這種記數用的,有甚麼好的名稱或包裝方式嗎
作者: Caesar08 (Caesar)   2016-08-31 23:22:00
i j k通常都是用來做為subscript,一看就知道是做甚麼了
作者: steve1012 (steve)   2016-09-01 03:39:00
重點是計數器不用寫成data member吧而且雖然一看就知道 但是並不知道是給誰用的 這麼多個vector 是要index誰

Links booklink

Contact Us: admin [ a t ] ucptt.com