Unity網路遊戲程式設計學習(三)

2021-10-08 20:29:26 字數 2014 閱讀 9463

學習《unity3d網路遊戲實戰》(第二版)時的學習筆記

unity網路遊戲程式設計學習(二)

比起使用非同步程式,同步程式更簡單明瞭,而且不會引發執行緒問題。只需要在阻塞方法前機上一層判斷,有資料可讀才呼叫receive,有資料可寫才呼叫send,既能實現功能,又不會卡住程式,於是給socket提供了poll方法。poll方法將檢查socket的狀態,如果不想讓方法阻塞,將等待引數設定為0即可。

class

clientstate

主迴圈結構while(true),不斷重複做兩件事:

判斷監聽socket是否可讀,如果監聽socket可讀,意味著有客戶端連線上來,呼叫accept回應客戶端,以及把客戶端socket鍵入客戶端資訊列表

如果某乙個客戶端socket可讀,處理他的訊息。

class

mainclass

//檢查clientfd

foreach

(clientstate cs in clients.values)}}

//防止cpu占用過高,大師依舊會占用大量cpu資源

system.threading.thread.

sleep(1

);}}

///

/// 讀取listenfd,開始accept

///

///

public

static

void

readlistenfd

(socket listenfd)

///

/// 接收客戶端訊息,並廣播給所有客戶端

///

///

///

public

static

bool

readclientfd

(socket clientfd)

catch

(socketexception ex)

//客戶端關閉

if(count ==0)

clientstate.recvstr = encoding.utf8.

getstring

(clientstate.recvbuffer,

0, count)

; console.

writeline

("receive"

+ clientstate.recvstr)

; sendstr = clientfd.remoteendpoint.

tostring()

+":"

+ clientstate.recvstr;

console.

writeline

(clientfd.remoteendpoint.

tostring()

);sendbuffer = encoding.utf8.

getbytes

(sendstr)

;foreach

(clientstate cs in clients.values)

return

true;}

}

伺服器的**還有三個注意點:

主迴圈最後呼叫了system.threading.thread.sleep(1),讓冊灰姑娘徐掛起1毫秒,這樣的目的是避免死迴圈,讓cpu有個短暫的喘息時間。

readclientfd會返回true或false,返回false表示該客戶端斷開。由於客戶端斷開後,readclientfd會刪除clients列表中對應的客戶端資訊,導致clients列表改變,而readclientfd又是再foreach的迴圈中被呼叫的,clients列表變化會導致遍歷失敗,因此程式再檢測到客戶端關閉後將退出foreach迴圈。

將poll的超時時間設定為0,程式不會有任何等待。如果設定較長的超時時間,伺服器端將無法即使處理多個客戶端同時倆捏的情況。當然,這樣也會導致程式的cpu佔用率很高。

總體來說,使用poll將會增加cpu的佔用率。

網路遊戲中的網路程式設計

談談網路遊戲中的 網路 程式設計 近段時間總是有不少人問我關於完成埠模型的一些資料,很多時候其實我很鬱悶,為什麼大家會選擇使用完成埠呢?或者說很多時候他們竟為了使用完成埠,而使用windows作為網路遊戲伺服器平台,還一開口羅列出一堆使用windows平台的網路遊戲案例。有些兄弟跟我一直爭論 win...

網路遊戲中的網路程式設計 效能

談談網路遊戲中的 網路 程式設計 近段時間總是有不少人問我關於完成埠模型的一些資料,很多時候其實我很鬱悶,為什麼大家會選擇使用完成埠呢?或者說很多時候他們竟為了使用完成埠,而使用windows作為網路遊戲伺服器平台,還一開口羅列出一堆使用windows平台的網路遊戲案例。有些兄弟跟我一直爭論 win...

Windows 網路遊戲程式設計 序章

由於畢業設計要選 題目,本來想從前幾年的題目中選乙個的,但是看過那些題目後,感覺沒有乙個適合自己的。仔細想了下,自己對遊戲興趣還是蠻大的,平時也經常玩lol,cf,鬥地主.之類的遊戲。所以就把自己的畢業設計題目定成了 基於windows平台的網路遊戲設計 這個題目可以簡單寫乙個歡樂鬥地主,複雜的可以...