2011-04-12 95 views
0

我正在学习C#,只需要一个指向正确的方向。我想在C#中建立一个与运行PHP/mySQL的服务器通信的客户端。两者之间需要几乎不间断的沟通。它将用于游戏,低延迟和双向通信。我不是在寻找一个确切的方法,而是需要使用什么方法来连接两者以获得最快和最可靠的连接。我读过其他人使用XML,但是如果使用的是近乎不变的,比如每秒钟使用一次或更多,那么似乎会变得更慢,但我可能完全错误。提前致谢!需要C#客户端连接到低延迟双向通信服务器

回答

0

通常与这些特征的通信是通过持久的TCP连接进行的。 C#在System.Net.Sockets命名空间中提供了大量现成的功能(从TcpClientTcpListener开始查看;如果需要它们,也有更多低级接口)。

这里的重要问题是:你究竟是什么意思“服务器运行PHP”?如果服务器只提供一个HTTP接口,那么你会发现与套接字进行通信更自然,但与WebClient或更低级别的HttpWebRequest类进行通信反而更自然。

+0

感谢您的信息。那么我精通PHP,所以这就是我制作我的游戏。现在我有一个基于浏览器的“客户端”使用Javascript构建,使用AJAX与服务器进行通信。这并不完美,但它可以工作(大部分时间)。当发送命令太快时,我遇到一些问题。但我想在C#中构建一个客户端,原因有二:能够自定义和完全控制客户端发生的事情,并通过学习像C#这样的桌面应用程序开发语言来更好地使用我的简历。 – Chris 2011-04-12 14:42:53

+0

实际上,这样的通信通常不是通过TCP连接完成的,而是通过UDP作为每个高质量金融低延迟数据馈送所展现的优势,以及视频或纯音频会议的每个标准。当数据包丢失命中时,TCP有严重的问题保证低延迟。 – TomTom 2011-04-12 15:08:52

+0

@TomTom:如果你需要保证交付,那么它是TCP。如果你不这样做,那么UDP肯定是一个主要的候选人 - 在阅读这个问题之后,我假设OP没有在两者之间作出有意的决定,因此应该指向“如果你不知道*你需要不同的东西,使用这个“解决方案(TCP)。 – Jon 2011-04-12 17:22:32

0

啊,用C#编写游戏作为开始使用该语言的一种手段!有多少人以这种方式开始。

您是否定义了客户端 - 服务器协议?我不是在谈论TomTom和Jon讨论过的TCP与UDP。我的意思是,数据流会是什么样子?

数据包碎片是低延迟网络代码的敌人。了解MTU和数据包碎片,Nagle的算法等,并在稍后实施网络代码时写下一些注释。确保你计算你希望发送的最小尺寸的数据包,它的头可能有多大,以及你可以装入的数据包的大小。然后看看你是否能够有效地使用可用空间的协议。

通过优化服务器应用程序和/或将其移植到不同的语言,您可能获得更多。仅仅因为你可以在服务器端使用PHP并不意味着你应该。在Web浏览器中保留显示有用信息的部分,并评估是否应该用另一种语言重写时间关键型和游戏客户端通信部分。在处理实时游戏世界数据时,解释型语言的速度并不是特别着名。当然,我曾经使用POE在Perl中写过类似的东西,但最终它的性能比我模拟的C代码低很多。

最后,我建议你看看XNA,因为它已经有很多这些东西了。

+0

感谢您的意见。你给了我很多东西来研究!我还没有定义客户端 - 服务器协议。我真的刚刚开始在客户端。 – Chris 2011-04-14 16:58:32