如何通过服务器将一对客户端连接在一起进行在线游戏?

时间:2009-10-27 21:31:00

标签: flex qt p2p

我正在开发一款多人游戏,我对如何通过服务器从一个客户端连接到另一个客户端一无所知。我从哪里开始?是否有任何提供通信框架的开源项目,我可以删除我的消息数据,还是必须编写一堆复杂的多线程sockety代码?如果客户端在手机上运行,​​图片是否会发生变化?

我是语言不可知的,虽然理想情况下我会有一个Flash或Qt前端和一个Java服务器,但这可能有点贪心。

我花了几个小时谷歌搜索,但整个主题对我来说是新的,我有点迷失。我很感激任何帮助 - 包括如何标记这个问题。

4 个答案:

答案 0 :(得分:1)

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

您还可以使用内置的flex messaging interface。那里有条款允许客户与客户进行互动。

答案 1 :(得分:1)

通常,游戏引擎会因延迟而发送UDP数据包。事实上,TCP速度不够快,可靠性不像速度那么值得关注。

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

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

祝你好运