2

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

在使用 SDL、SFML、Allegro 等之前,我用 C++ 完成了很多游戏,但从未使用过网络库。我只是对一些有用的方向感兴趣,哪些库最适合实际服务器没有任何图形显示(或不需要但可以有)的游戏服务器。老实说,我认为答案是任意的,一旦我掌握了套接字的窍门,来回发送数据就会变得轻而易举……但首先问起来是无济于事的。

我在 flash 或 as3 方面的经验很少,但喜欢能够通过浏览器访问游戏的想法 - 学习 flash 显然是一个我必须克服的难题,但我的主要兴趣再次是关于库的任何提示,或资源,或适合通过套接字或任何最有效的方法发送/接收数据的教程。

我已经阅读了 TCP/UDP 之间的争论,所以我不想在这里发动这样的战争;请提供一般有用的建议 - 我只是在寻找一些简单的东西来让我启动和运行:-p

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

更新:

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

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

玩家与服务器的一般交互将是上传新代码和获取统计数据,还可能有其他一次性命令来移动机器人或将其重置到起始位置。任何远程控制都是通过通信通道完成的,因此会被缓冲区延迟。这很容易解释为持久世界位于火星(行星)之类的某个地方,并且信号需要一段时间来来回回。

我正计划建立一个“实验室”,您可以在其中设置机器人并在客户端上实时测试它们,这与实际的游戏世界无关,因此不需要任何网络 - 尽管我不喜欢用两种语言编写虚拟机:(

我对 C++ 非常熟悉,并且已经有了一些持久化世界的工作原型——在网络方面我只是一个完全的新手,所以我认为最好先获得建议。

4

4 回答 4

2

虽然它主要是为 C 编写的,但它仍然适用于 C++:
Beej 网络编程指南。
它涵盖了所有基础知识,并有一节介绍了 Win32 所需的更改 :)
我似乎还记得 Flash 需要终止空字节每个数据包,所以而不是 send(socket,szData,strlen(szData),0); 使用发送(套接字,szData,strlen(szData)+1,0);发送一个字符串:)

于 2008-11-04T13:58:18.160 回答
2

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

于 2008-11-04T14:14:37.173 回答
1

使用 Flash 的 Socket 或 XMLSocket 类时,请确保您的服务器上有一个安全策略文件。否则,您将无法打开套接字。查看这个SO question了解更多信息。

于 2009-08-25T16:23:46.357 回答
0

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

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

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

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

我不知道这是否符合您对游戏或平台的要求,我只是将其作为建议提出

于 2008-11-05T15:22:12.123 回答