2011-01-07 93 views
4

我正在考虑编写一个基于服务器的游戏,并且有几个客户端程序连接到它。游戏(非常)基本上由用户可以“接受”的项目列表组成,这些项目将从所有连接的计算机的列表中删除它(这需要非常快速地更新)。编写基于客户端 - 服务器的游戏的建议

我正在考虑为客户端使用Java applet,因为我希望这是可移植的,并且可以从浏览器(主要在Windows)中运行,并且可以更快速地更新,并且可以运行C++或Java服务器Linux(目前只是一个家庭服务器,但可能会使用VPS)。

这个游戏的前一个'化身'在浏览器中运行,并且使用PHP + mySQL作为后端,但是当几个人连接时(这与大约8人有关,这最终需要以处理更多)。
用户可能都在同一个物理位置(具有相同的公共IP地址),并且系统每秒会得到几个请求,所有这些都需要将列表发送回客户端。

有些计算机可能对它们有防火墙限制,因此您会推荐使用HTTP通信,自定义端口还是通过SSH或某些现有协议?

任何人都可以提供一些提示(线程,一个项目的多个请求?),工具,数据库(mySQL?)或API,这将帮助我开始这个项目?我更喜欢C++作为后端,因为它会更快,但使用Java将允许我重用代码。

谢谢!

回答

2

对于任何想为C++提供良好网络API的人,我总是建议Boost.Asio。它具有与平台无关的优点,因此您可以编译用于Linux,Windows等的服务器。但是,如果您不太熟悉C++模板/ boost,则代码可能会有点过分。看看,试试看。

就一般建议而言。鉴于上面的描述,你似乎需要一个相对简单的服务器。我建议保持它非常基本,单线程轮询循环。从连接的客户端读取消息(等待多个套接字),然后进行适当的响应。这消除了多次访问您的列表和其他同步问题的任何问题。

我也许还建议,在你重写你的初始化身之前。尝试改进它,如你所说:

和系统会得到每秒几个请求,所有这些都需要发送列表回到客户端。

由于每个请求从列表中移除的项目,为什么不直接告诉你的用途哪个项目被删除,而不是一遍又一遍的网络时间和时间发送整个列表?如果这个列表的大小很大,这个小小的改变会带来很大的改进。

+0

我会看看Boost,谢谢。旧版本的问题是我无法完成推送,所以我使用了轮询,并在请求中填充了Apache。 – neuropie 2011-01-07 17:29:32

+0

此外,你会建议有一个线程循环为每个客户端,或为他们所有? – neuropie 2011-01-07 17:32:35

3

因为速度本身,我不会使用C++。性能差异不太可能会对你的游戏产生真正的影响。 (除非在客户端和服务器之间有10 GigE,否则您的网络可能会影响性能差异)我会使用C++或Java,因为您将首先使用该语言来使用它。

相关问题