繁体   English   中英

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

[英]Advice for writing Client-Server based game

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

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

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

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

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

谢谢!

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM