1

我正在开发一款多人游戏,但我对如何通过服务器从一个客户端连接到另一个客户端一无所知。我从哪说起呢?是否有任何出色的开源项目提供通信框架,我可以将消息数据放入其中,或者我是否必须编写大量复杂的多线程套接字代码?如果客户端在手机上运行,​​情况会发生变化吗?

我与语言无关,虽然理想情况下我会有一个 Flash 或 Qt 前端和一个 Java 服务器,但这可能有点贪婪。

我花了几个小时在谷歌上搜索,但整个话题对我来说都是新的,我有点迷茫。我将不胜感激任何形式的帮助 - 包括如何标记这个问题。

4

4 回答 4

1

如果延迟不是一个大问题,您可以只实现一些 Web 服务来进行消息传递。这不会像您想象的那样缓慢,并且很容易跨语言实现。缺点是客户端必须轮询服务器以获取更新。所以你可能需要几百毫秒才能从一个客户到另一个客户。

您还可以使用内置的弹性消息接口。那里有允许客户端与客户端交互的规定。

于 2009-10-27T21:35:55.280 回答
1

由于延迟,游戏引擎通常会发送 UDP 数据包。事实是 TCP 速度还不够快,可靠性比速度更重要。

由于额外的开销,Web 服务会加剧 TCP 中固有的延迟问题。此外,它们会根据预期玩家的数量消耗内存。最后,它们有大量您根本不需要的有效负载开销(xml 任何人?)。

有几种方法可以解决这个问题。一种方法是集中消息传递(客户端/服务器)。这意味着您将有一个 java 服务器侦听来自客户端的 udp 数据包。然后它将它们转播给任何相关用户。

第二种方式是去中心化的(点对点)。客户端向服务器注册以说明它所在的游戏/世界。从中获取该世界中其他客户端的列表。服务器维护该列表并通知其他客户端加入/退出的人员。

从那时起,转发客户端直接向其他用户广播 udp 数据包。

于 2009-10-27T21:45:12.810 回答
0

您还可以查看 Flash Media Interactive Server,或者如果您想要 Java 实现,Wowsa 或 Red5。那些使用 AMF 并为 ShareObjects 提供本机功能,包括在连接的客户端之间同步 ShareObjects。

这些不是点对点的(但是,我听说它很快就会到来)。他们使用由服务器管理的集中消息传递。

祝你好运

于 2009-10-28T17:54:20.377 回答
0

如果您正在寻找具有高性能的通信框架,请尝试查看 ACE C++ 框架(它具有 Java 绑定)。

官方网站是:http ://www.cs.wustl.edu/~schmidt/ACE-overview.html

于 2009-10-28T13:30:20.803 回答