此為大四下,上修研究所課程-分散式系統的作業之一。作業內容是要求透過 RPC 的方式來建構一個聊天室。這和一般常用的 Socket 有點不太一樣,因為他是 Client 可以直接呼叫 Server 端的 Function。這樣程式寫起來感覺是比 Socket 簡單許多,但是就是一定要符合 RPC 的規格才行。而且 Server 端也要特殊的架構才可以執行,總之,這個作業讓我更了解上課老師所教的 RPC。編譯環境為 gcc,程式語言為 C。
![](https://pic.pimg.tw/qazq/1168014709.png)
為了讓一個人說話大家都收的到,最後我是採用 Client 端定期向 Server 端要最新的訊息,為了不讓重複收到一樣的訊息,我替每筆訊息加上了 ID,Client 只向 Server 要比手上 ID 還大的訊息。而為了避免在打字或是在等待訊息的時候程式 Block 住,所以我採用了 select() 來達成多工執行,有點像是 Thread 但是又沒有他那麼複雜,可以說是簡單又好用。下圖為一方說話另一方馬上可以收到。
![](https://pic.pimg.tw/qazq/1168014689.png)
而作業有提到可以發俏俏話的當作是 bonus,所以我也實作了這個部份,Server 送訊息給 Client 的時候,如果該筆為俏俏話,那只送給接受者,其他人不送。
![](https://pic.pimg.tw/qazq/1168014701.png)
另外,為了可以固定打字的地方都維持在下方,訊息區保持在中間,還有色彩控制碼,我有用到了,他可以控制游標的位置,讓你可以在想要的地方輸出顯示,還可以讓輸出的字串上色,第一次使用他還因為不知道要在 gcc 的時候多加額外的參數讓我卡住了好一陣子。(如果可以用視窗程式設計就不用那麼麻煩了...)最後,因為訊息區有限,所以採用了 "循環" 的方式來顯示訊息,到底之後會回到最上面重新開始顯示,本來是要做到底之後就一直顯示在底部,只是將原有的訊息全部上移,這樣感覺會炫很多!但是後來時間不足所以就沒做了...下面是一些程式執行的畫面。
![](https://pic.pimg.tw/qazq/1168014709.png)
![](https://pic.pimg.tw/qazq/1168014709.png)
為了讓一個人說話大家都收的到,最後我是採用 Client 端定期向 Server 端要最新的訊息,為了不讓重複收到一樣的訊息,我替每筆訊息加上了 ID,Client 只向 Server 要比手上 ID 還大的訊息。而為了避免在打字或是在等待訊息的時候程式 Block 住,所以我採用了 select() 來達成多工執行,有點像是 Thread 但是又沒有他那麼複雜,可以說是簡單又好用。下圖為一方說話另一方馬上可以收到。
![](https://pic.pimg.tw/qazq/1168014689.png)
而作業有提到可以發俏俏話的當作是 bonus,所以我也實作了這個部份,Server 送訊息給 Client 的時候,如果該筆為俏俏話,那只送給接受者,其他人不送。
![](https://pic.pimg.tw/qazq/1168014701.png)
另外,為了可以固定打字的地方都維持在下方,訊息區保持在中間,還有色彩控制碼,我有用到了
![](https://pic.pimg.tw/qazq/1168014709.png)
![](https://pic.pimg.tw/qazq/1168014715.png)
全站熱搜