2010-02-26 81 views
3

我在想像Counter Sstrike,WoW等使用的方法游戏。在CS中,你通常只有50个ping,有没有办法以这种速度向在线MySQL数据库发送信息?如何像许多游戏一样快速发送信息?

目前我使用这我的程序请求一个在线的PHP脚本,但是这是很慢的,因为程序首先必须发送标题和信息后给它,然后检索结果作为一个普通的网页。

真有必须这样做的任何更容易,更快捷的方式?我听说过TCP/IP,这是我应该在这里使用的吗?通过PHP脚本可以以更快的方式连接到数据库吗?

+1

这是标签为c#,但你使用PHP? – jvenema 2010-02-26 03:55:50

+0

我的应用程序使用C#。 – Phoexo 2010-02-26 04:15:39

回答

3

TCP/IP是由三个协议:

  1. TCP
  2. UDP
  3. ICMP

ICMP是当你ping一个网络上的另一台计算机使用的是什么。

游戏,像反恐精英,不在乎你以前一样。所以没有完整性的要求,能够重建你所做的(这就是为什么竞争对手必须将他们正在做的事情放在一边)。这就是UDP的用途 - 无法保证数据的传送或接收。这就是为什么滞后会成为这样一个问题 - 你已经死了,你只是不知道它。

TCP保证发送和接收数据。比UDP慢。

有许多事情需要注意的有一个快速的连接 - 少啤酒花等

+0

+1很好说 - 我知道UDP是“无连接”,并没有交付保证......但我从来没有考虑到性能增益的潜力....非常好! (对你来说+1也是kyoryu) – NTDLS 2010-02-26 04:24:51

+1

通常情况下,游戏将在UDP之上建立一个可靠性层,用于需要接收*的消息,并且不会'过期'。因此移动更新将不可靠地发送,而诸如死亡消息或聊天之类的信息将被可靠地发送。 – kyoryu 2010-02-26 04:47:26

2

大多数游戏一样,你举的使用UDP这样做的那些(一个在TCP/IP协议的。)由于UDP的重量更轻,因此可以获得更好的性能,并且TCP的可靠性功能不是必需的,因此UDP是通过TCP选择的。

但请记住,这些游戏都有独立的客户端和服务器一般用C或C++。如果您的应用程序是基于浏览器的,并且您尝试通过HTTP执行此操作,那么请使用长期连接并尽可能多地删除标题,包括Cookie。您在那里可能会对Tornado框架感兴趣。你也可能想看看HTML5 WebSockets,但是广泛的支持仍然是一个公平的选择。

如果你的目标基于浏览器的插件,如Flash,Java和Silverlight的,那么你可能能够使用UDP,但我不知道有足够的了解这些平台进行确认。

编辑:

另外值得一提的是:一旦你的网络代码和协议充分优化there are still things you can do改善为玩家提供高坪的经验。

3

客户端到服务器的延迟关键的东西?使用非阻塞UDP。

对于可靠的东西,可以慢一点,如果使用TCP确保您在非阻塞的方式做到这一点(选择(),非阻塞发送等)。

使用UDP的主要原因是如果你有时间敏感的数据 - 如果一个小动物的位置下降,你最好忽略它并发送下一个位置数据包,而不是重新发送最后一个数据包。

而且我不认为任何高性能游戏都会将每个调用都解析为调用数据库。 (如果甚至使用数据库)偶尔或在重要事件中持续存在数据更为常见。

你不打算在http上实现Counterstrike或类似的东西。