我正在學習C#,只需要一個指向正確的方向。我想在C#中建立一個與運行PHP/mySQL的服務器通信的客戶端。兩者之間需要幾乎不間斷的溝通。它將用於遊戲,低延遲和雙向通信。我不是在尋找一個確切的方法,而是需要使用什麼方法來連接兩者以獲得最快和最可靠的連接。我讀過其他人使用XML,但是如果使用的是近乎不變的,比如每秒鐘使用一次或更多,那麼似乎會變得更慢,但我可能完全錯誤。提前致謝!需要C#客戶端連接到低延遲雙向通信服務器
回答
通常與這些特徵的通信是通過持久的TCP連接進行的。 C#在System.Net.Sockets
命名空間中提供了大量現成的功能(從TcpClient
和TcpListener
開始查看;如果需要它們,也有更多低級接口)。
這裏的重要問題是:你究竟是什麼意思「服務器運行PHP」?如果服務器只提供一個HTTP接口,那麼你會發現與套接字進行通信更自然,但與WebClient
或更低級別的HttpWebRequest
類進行通信反而更自然。
啊,用C#編寫遊戲作爲開始使用該語言的一種手段!有多少人以這種方式開始。
您是否定義了客戶端 - 服務器協議?我不是在談論TomTom和Jon討論過的TCP與UDP。我的意思是,數據流會是什麼樣子?
數據包碎片是低延遲網絡代碼的敵人。瞭解MTU和數據包碎片,Nagle的算法等,並在稍後實施網絡代碼時寫下一些註釋。確保你計算你希望發送的最小尺寸的數據包,它的頭可能有多大,以及你可以裝入的數據包的大小。然後看看你是否能夠有效地使用可用空間的協議。
通過優化服務器應用程序和/或將其移植到不同的語言,您可能獲得更多。僅僅因爲你可以在服務器端使用PHP並不意味着你應該。在Web瀏覽器中保留顯示有用信息的部分,並評估是否應該用另一種語言重寫時間關鍵型和遊戲客戶端通信部分。在處理實時遊戲世界數據時,解釋型語言的速度並不是特別着名。當然,我曾經使用POE在Perl中寫過類似的東西,但最終它的性能比我模擬的C代碼低很多。
最後,我建議你看看XNA,因爲它已經有很多這些東西了。
感謝您的意見。你給了我很多東西來研究!我還沒有定義客戶端 - 服務器協議。我真的剛剛開始在客戶端。 – Chris 2011-04-14 16:58:32
- 1. 客戶端 - 服務器雙向通信
- 2. 胖Java客戶端需要通過http/https雙向通信到Web服務器
- 3. 在Netty中設置低延遲客戶端/服務器示例
- 4. Java雙向套接字連接(服務器/客戶端)
- 5. 顯示客戶端 - 服務器雙向通信的ActiveMQ示例?
- 6. 跨語言雙向客戶端 - 服務器通信方法?
- 7. Java:加密的服務器/客戶端雙向通信?
- 8. 雙向WCF客戶端 - 服務器通信
- 9. 雙向客戶端服務器網絡通信
- 10. REST服務器到客戶端通信
- 11. 服務器到客戶端通知/ Web服務(jax-ws)到客戶端通信
- 12. 雙向客戶端服務器
- 13. Java客戶端/服務器通信,我需要學習
- 14. UNIX域套接字服務器和客戶端不能雙向通信
- 15. 錯誤連接到C#客戶端到C服務器
- 16. 客戶端連接或服務器端?
- 17. 客戶端發送延遲的FIN ACK(〜500ms)到服務器
- 18. Tcp客戶端雙向通信幫助
- 19. winsock客戶端和服務器通信
- 20. Silverlight客戶端 - 服務器通信
- 21. 客戶端/服務器,加密通信
- 22. 客戶端 - 服務器TCP通信
- 23. 客戶端 - 服務器通信
- 24. Android客戶端服務器通信
- 25. 服務器 - 客戶端通信
- 26. 服務器/客戶端通信問題
- 27. 客戶端服務器通信故障
- 28. Python客戶端服務器通信
- 29. 客戶端/服務器通信WPF
- 30. 服務器客戶端通信java
感謝您的信息。那麼我精通PHP,所以這就是我製作我的遊戲。現在我有一個基於瀏覽器的「客戶端」使用Javascript構建,使用AJAX與服務器進行通信。這並不完美,但它可以工作(大部分時間)。當發送命令太快時,我遇到一些問題。但我想在C#中構建一個客戶端,原因有二:能夠自定義和完全控制客戶端發生的事情,並通過學習像C#這樣的桌面應用程序開發語言來更好地使用我的簡歷。 – Chris 2011-04-12 14:42:53
實際上,這樣的通信通常不是通過TCP連接完成的,而是通過UDP作爲每個高質量金融低延遲數據饋送所展現的優勢,以及視頻或純音頻會議的每個標準。當數據包丟失命中時,TCP有嚴重的問題保證低延遲。 – TomTom 2011-04-12 15:08:52
@TomTom:如果你需要保證交付,那麼它是TCP。如果你不這樣做,那麼UDP肯定是一個主要的候選人 - 在閱讀這個問題之後,我假設OP沒有在兩者之間作出有意的決定,因此應該指向「如果你不知道*你需要不同的東西,使用這個「解決方案(TCP)。 – Jon 2011-04-12 17:22:32