我有兴趣整理我的第一个使用Flash作为客户端的在线游戏,并在C ++中编写后端应用程序,保持实际的游戏状态。

在使用SDL,SFML,Allegro等之前,我已经用C ++完成了很多游戏,但从未使用过网络库。我只是对一些有用的方向感兴趣,哪些库最适合游戏服务器,而实际的服务器没有任何图形显示(或者不需要但可能有)。说实话,我认为答案将是任何,一旦我掌握了套接字,它就会变得轻而易举地来回发送数据......但是首先要问这个问题。 / p>

我对flash或as3的经验很少但是喜欢能够通过浏览器访问游戏的想法 - 学习闪存显然是一个我必须克服的障碍,但我的主要兴趣是任何有关通过套接字发送/接收数据的图书馆,资源或教程的提示或最适合的方法。

我已经读过TCP / UDP之间的争论,所以我不想在这里开始这样的战争;请给我一般有用的建议 - 我只是想找到一些简单的东西来启动和运行:-p

作为旁注,我选择C ++的原因是因为玩家实际上是具有微型虚拟机的机器人,并且所有内容都将在服务器上运行,因此玩家数量会增加,因此需要模拟每个vm :-P

更新

游戏世界旨在实时,但玩家的互动并非必须如此。游戏的基础是你编写的小机器人可以在持久的世界中进行交互,并且每天/每周都有目标和挑战来获得积分。

我认为缓存显示数据是可能的,因为玩家不需要实时视觉,因为他们无法直接控制他们的机器人。服务器会为每个连接缓冲10秒左右的数据,然后一次性将其发送出去 - 这样,当数据在客户端播放时,服务器正在忙着缓冲更多。

玩家将与服务器进行的一般互动将上传新代码并获取统计数据,还可能有其他一个关闭命令来移动机器人或将其重置为起始位置。任何远程控制都通过通信通道完成,因此被缓冲区延迟。这可以很容易地解释为这样一个事实:持久的世界就像火星(行星),信号需要一段时间才能来回传播。

我打算准备一个“实验室”。你可以设置机器人并在客户端上实时测试它们,这与实际的游戏世界无关,因此不需要任何网络 - 虽然我不想用两种语言编写VM:(

我对C ++感到非常自在,并且已经拥有了一些持久世界的原型 - 我只是一个完整的新手,因此我认为最好先获得建议。

有帮助吗?

解决方案

虽然它主要是为C语言编写的,但它仍然适用于C ++:
Beej的networ programming.k指南 它涵盖了所有基础知识,并有一个关于Win32 :)所需更改的部分 另外我似乎记得Flash需要在每个数据包上终止空字节,所以不是send(socket,szData,strlen(szData),0);使用send(socket,szData,strlen(szData)+1,0);发送字符串:)

其他提示

使用boost :: asio进行网络编程

使用Flash的Socket或XMLSocket类时,请确保服务器上有安全策略文件。否则,您将无法打开套接字。有关详细信息,请查看此 SO问题

我不确定您的游戏是否需要实时通信,或者是否向服务器发出加载,保存和执行游戏的请求就足够了。

如果是,你可能最好使用某种“中间件”。用于处理网络部分的图层。 Flash很高兴制作xml文档并通过HTTP将它们发送到服务器,然后处理收到的XML响应。它有很多很好的内置功能,可以很容易地处理所有这些事情。

也许您可以在c#或php或java中使用服务器,具体取决于您在Web服务器中运行的平台并处理请求和响应,并将请求传递给您的c ++服务器,该服务器可以通过消息队列在服务器上独立运行或数据库或本地连接。

闪存和服务器端可能更容易以这种方式处理网络和通信问题,因为即使使用库,c ++也不是最简单的网络语言。

我不知道这是否符合您对游戏或平台的要求,但我只是将其作为建议投入使用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top