我正在考虑写一个基于服务器的游戏,几个客户端程序连接到它。游戏( very )基本上由用户可以“接受”的项目列表组成,这会将其从所有连接的计算机上的列表中删除(这需要快速更新)。
我正在考虑在客户端使用Java applet,因为我希望这是可移植的,可以在浏览器(主要是Windows)上运行,而且更新速度很快,可以是运行在Linux上的C++或Java服务器(目前只是一个家庭服务器,但也可能在VPS上运行)。
这个游戏的前一个“化身”在浏览器上运行,并使用PHP+mySQL作为后端,但当几个人连接时,这会使服务器相当不堪重负(大约有8个人,最终需要处理更多的人)。
用户可能都在相同的物理位置(具有相同的公共IP地址),系统每秒将收到几个请求,所有这些请求都需要将列表发送回客户端。
有些计算机可能有防火墙限制,因此您是否建议使用HTTP通信、自定义端口,或者可能通过SSH或某些现有协议?
有没有人能推荐一些技巧(线程,一个项目的多个请求?)、工具、数据库(mySQL?)或API来帮助我开始这个项目?我更喜欢C++作为后端,因为它会更快,但使用Java可以让我重用代码。
谢谢!
发布于 2011-01-08 01:12:53
我不会仅仅因为速度的原因而使用C++。性能上的差异不太可能对您的游戏产生真正的影响。(您的网络可能会影响任何性能差异,除非您的客户端和服务器之间有10个GigE )我会使用C++或Java,因为您将首先使用该语言使其正常工作。
发布于 2011-01-08 01:11:32
对于任何正在寻找用于c++的好的网络应用程序接口的人,我总是推荐Boost.Asio。它的优点是与平台无关,所以你可以为linux,windows等编译服务器。但是,如果你不太熟悉c++模板/boost,代码可能会有点压倒性。看一看,试一下。
就一般的建议而言。根据上面的描述,您似乎需要一个相对简单的服务器。我建议让它保持非常基本的单线程轮询循环。读取来自您连接的客户端的消息(在多个套接字上等待),并做出适当的响应。这消除了围绕列表的多次访问的任何问题以及其他同步问题。
我也可能建议,在你重写你最初的化身之前。试着改进它,正如你所说的:
和系统每秒都会收到几个请求,所有这些请求都需要将列表发送回客户端。
考虑到每个请求都会从列表中删除一项,为什么不直接通知用户删除了哪一项,而不是一次又一次地通过网络发送整个列表呢?如果这个列表有任何重要的大小,那么这个小的改变将会带来很大的改进。
https://stackoverflow.com/questions/4628054
复制相似问题