2015-07-19 60 views
0

我正在與Lidgren建立一個遊戲,我想知道是否有方法從某個客戶端讀取消息,而不僅僅是從整個服務器讀取消息,例如 -從Lidgren的某個客戶端讀取消息

//Why doesn't this exist? 
NetIncomingMessage message = server.Connections[0].ReadMessage(); 

這樣我就可以分裂從每個客戶端讀取數據到它自己的線程,並有一個單獨的線程將數據發送到每個客戶端。目前在我的服務器中只有一個循環,它讀取數據包,我擔心比其他人更喜歡一個客戶端,因爲某些玩家的動作需要一段時間才能被其他玩家接收。我相信,從每個客戶分開閱讀郵件將解決這個問題。使用簡單的TcpClients,你可以讀取每個客戶端的流而不是整個服務器,我喜歡這個功能,但也依賴於通過Lidgren發送數據包的簡單性,並想知道是否有與Lidgren類似的功能。

回答

0

您可以在一個線程中讀取消息,然後將它們填充到併發安全集合中,例如connection.Tag消息。然後每個單獨的線程將爲該連接出列消息。 但是;這聽起來像是一個非常糟糕的解決方案,我認爲這個問題是現有代碼中的一個錯誤......沒有理由在單個線程上閱讀消息會使任何客戶端更傾向於另一個客戶端;消息按照它們到達的順序排隊和出隊。 每個客戶端執行一個線程會產生一大堆同步問題,您必須在處理收到的消息內容時解決這些問題;除非你有一個非常有說服力的理由,否則我會反對它。