编写基于客户端服务器的游戏的建议

时间:2011-01-07 16:55:22

标签: java c++ applet

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

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

由于速度原因,我不会使用C ++。性能差异极不可能对您的游戏产生真正的影响。 (您的网络可能会消除任何性能差异,除非您在客户端和服务器之间有10 GigE)我会使用C ++或Java,因为您将首先使用该语言。

答案 1 :(得分:2)

对于那些为c ++寻找良好网络API的人,我总是建议Boost.Asio。它具有独立于平台的优点,因此您可以为Linux,Windows等编译服务器。但是,如果您不熟悉c ++模板/ boost,那么代码可能会有点压倒性。看看,试一试。

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

在你重新写下你的初始化身之前,我也可能会建议你。正如你所说的那样,尝试改进它:

  

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

鉴于每个请求都会从此列表中删除一个项目,为什么不通知您使用哪个项目被删除,而不是一次又一次地通过网络发送整个列表?如果此列表具有任何显着大小,则此次微小更改将导致较大的改进。