Articles of 点对点

如何从p2p游戏networking中的客户安全地检索游戏统计信息?

我正在做一个P2P游戏,我知道我永远不要相信客户。 我的架构中,有一个存储游戏室(主机)信息的“主服务器”。 玩家可以创建自己的房间(托管)并一起玩。 还有另外一个服务器是“信息服务器”,它存储了诸如库存,等级等字符信息。现在,我需要制作一个杀死/死亡的统计表,并且我必须从主机玩家>> [事件] >>主服务器)。 但是我认为主玩家可以发送很多杀人事件,因为它是权威的,所以主服务器会处理/处理来自主玩家的所有事件。 我怎样才能相信这些事件? 服务器不能发送假死/死亡事件?

点对点networking架构能否适合我的格斗游戏?

我期待开发一款2D飞船战斗游戏 ,我对此有如此多的想法。 无论如何,我将会制作一个单人游戏组件,但这个游戏的核心肯定是它的多人游戏。 对于这个游戏,我受到Brawlhalla及其充满活力的游戏风格的启发 。 在我的游戏中,必须有实时动作function,如攻击,躲闪,被击中,死亡,所以一个可靠的networking需要存在。 我曾经想过一个客户/服务器体系结构,但是在我看来,对等连接在我看来更容易实现。 我已经阅读了这篇文章,这对我继续使用这个模拟解决scheme来说是令人鼓舞的。 让我来形容我的概念: 客户端初始化一个房间,然后使用套接字,IP,端口和其他玩家连接到他之后。 因此,总有一个主客户端处理新的连接,并向其他客户端发送关于新的现有播放器的信号。 然后,当游戏运行时,字节数据包将stream入每个玩家的input,他的位置,他的轮船,他的船状态等等,以便其他每个客户端可以对初始客户端进行完美的模拟。 换句话说,这个数据包将触发每个客户端上的所有操作。 作为networking协议,我在考虑TCP / IP,如果有人愿意以更实际的方式向我解释这个和UDP的区别,我会很感激。 我甚至计算了需要一秒钟传输多less数据:假设一个byte [256]数组一次保存所有数据乘以每秒的调用次数( 约32次 )乘以客户端数量应将数据广播到( 3-4 )结果约32kb / s 。 这可能是一个虚拟的结果,我可能留下了很多东西,但是,我已经准备好学习了。 作为一个说明,我现在不打算在这个时候制作一个专业的多人游戏系统,但是我想更多地了解这个应用程序的编程部分,我认为这是一个非常好的项目想法来提高我的技能。 当然,我对任何先进的技巧,解决scheme,材料都是开放的,我应该添加一些关于我的概念的东西,请让我知道。 我的理论模型到目前为止如何?

主机迁移(P2P)与RTMFP和AS3

我想知道这是否与RTMFP的可能性,因为它的行为像UDP / P2P .. 主机迁移 玩家A开始并主持游戏 玩家B和C连接.. 玩家A退出 玩家B现在被指定为新的主机/服务器 游戏没有中断或断开。 也许有关RTMFP / AS3如何完成的一个基本示例?

如何检测此拓扑的对等networking中断开连接的客户端?

我正在开发我的第一个多人游戏(RTSstream派)和networking模型,我更倾向于一个点对点模式,而不是一个客户端 – 服务器模型。 我希望我的游戏能够以合理的方式同时处理大量的用户(大约50-100个用户)。 我提出了一个概念certificate,可以在整个networking中实现中等速度和中等负载平衡。 为了工作,其中一个同行必须被指定为中央机构(即主机)。 然后主机通过星形拓扑接收来自用户的更新,然后通过树状拓扑向其他用户广播更改,如下所示: 这种types的networking有一个大问题:stream失。 我无法弄清楚如何处理与networking断开连接的用户。 如果没有为他们做任何事情,该用户的所有孩子(和后代)将失去联系。 如何检测我的预期大小的对等networking中的断开连接的节点,并在不损害其他连接的客户端的情况下将其删除而不会给指定的主机造成不必要的负担?

如何给纸牌游戏中的每个玩家同样的洗牌套牌?

我在Swift写了一个纸牌游戏。 这个想法是让它在Apple Game Center框架上工作。 我注意到一个问题,我不知道如何解决。 我需要当前的游戏数据对所有玩家都是一样的。 游戏中有6名玩家。 有一副30张牌,他们正在洗牌。 每个玩家必须拥有相同的牌(后洗牌)。 一张一张地展示6张牌(animation)。 还有一些玩家所做的其他活动超出了这个问题的范围。 我的问题是这个; 我该如何给每个玩家洗牌? 有几个select我可以想到,但也许这些都是最好的方法; 因此我的问题 开始玩家是host 。 host创建洗牌牌组,并将该牌组发送给其他玩家(即:JSON); 总之所有的活动都是通过他来进行的。 问题在于开始玩家可能会失去互联网,放弃游戏还是各种各样? 所以我不认为这是一个可行的解决scheme 有一个中间人,服务器。 有一个“大厅”(等候区)有多个游戏。 游戏中有玩家。 AI机器人可以用来填补被遗弃的玩家 但是等等,这是否意味着服务器洗牌并向所有玩家发送相同的数据,并使玩家成为“瘦客户端”? 苹果的游戏中心能为我处理吗? 我不确定这个最好的解决scheme吗?

点对点的世界下载

我正在用PHP中央服务器创建一个多人游戏的JavaScript游戏。 每个用户将能够在3D世界中与其他用户和NPC一起移动。 我注意到,SQL不会在合理的时间内处理所有的请求。 所以我减less了经常使用的SQL请求,尽可能使用RAM,但是每个login到我的世界的用户或交换机世界都需要从服务器过滤大量数据(所以客户端不会获得任何信息它不应该有,所以我不必为每个login分发整个世界),然后上传到客户端。 所以我有一个想法: 如果我可以从玩家附近的用户(在3D世界)获得世界数据,就像一个BitTorrent? 如何解决同步问题? 我有什么select来防止黑客? 我的想法是:检查多个用户,从服务器获取散列(可能会出现同步问题),向客户请求世界的机器人:然后检查服务器,看看他们是否诚实,他们看起来如何有他们的问题,我不知道我应该纳入哪一个(S),或者如果有更好的方式,我可以从同行获得正确的世界数据,与最小的服务器交互。 注:点对点仅用于获取世界,块/世界更新仍在服务器和每个客户端之间处理

在非权威的networking对等场景上进行同步

我目前有一门课程,需要通过p2p连接3个或更多的3d模拟,以维持一个仿真,在所有的同伴之间视觉上一致。 一个大问题是,我不允许使用任何forms的权威服务器/对等逻辑,而我正在为潜在的devise而苦苦挣扎。 课程作业有以下相关限制 每个对等点必须在开始时连接并且将具有相同的初始空模拟 networking将只是局域网 硬件在networking中的所有计算机上都是一致的 我正在考虑按照 每个对等体将定期创建自上次快照以来已经移动的所有对象的快照 每个节点除了将节点广播给所有其他节点之外,还将保留快照的本地副本 每个对等体可能通过平均和将其添加到当前本地状态来组合其他快照。 我想我也可以使用每个快照的时间戳来加权组合。 每个对等体简单地运行本地模拟,然后重复这个过程 任何人都可以看到任何潜在的问题或推荐任何东西?

我怎样才能防止在分布式多人游戏中作弊?

我最近一直在想的问题是如何创建一个没有集中游戏服务器的多人游戏。 是否有可能在玩家之间分配“服务器”职责? 我觉得被修改/被黑客户端改变多人游戏体验太容易了,有没有办法解决这个问题?

点对点在线多人游戏中的游戏同步

我正在开发online real-time multiplayer game using Google Play Game Service and Cocos2D-X的online real-time multiplayer game using Google Play Game Service and Cocos2D-X 。 这个游戏有两个玩家,每个玩家控制自己的球。 每个玩家将自己own ball's velocity and position发送到其他连接的设备。 在我的游戏中,所有的物理计算都是locally on each devices即物理计算后的球速度locally on each devices进行locally on each devices计算。 问题 : 当快速移动的球与对手的球碰撞时,对方球no change in the movement velocity 。 (根据现实世界的物理,快速移动的球应该能够推动对手的缓慢移动的球。) 原因: 在我的代码分析过程中,我了解到由本地物理引擎计算的速度被从对手的设备接收到的数据覆盖。 例如 解决scheme我尝试过 为了解决这个问题,每当发生球之间的碰撞,我创建一个设备作为服务器和其他设备作为客户端。 所有物理计算都在服务器设备上进行,数据发送到客户端设备。 我有以下问题: […]

如何同步对等游戏中的游戏勾号?

我正在使用同步服务(在本例中为Firebase)制作2人iPhone动作游戏。 该服务允许状态通过互联网同步,但我必须执行手机上的所有游戏逻辑。 我已经阅读了大量的游戏networking文章,而且由于我没有服务器,因此如果我可以同时在两个“准确”的时间同时开始游戏,我可以从那里调整所有的东西 。 (计划在每部手机上使用“打勾”计数,并将打勾与动作一起发送,然后在需要时倒回模拟。手机将游戏分成两半以确定权限)。 但是,如何让远程客户同时启动游戏勾号? 这似乎是必然的锁步一对一,和类似的FPS游戏。 我现在使用的策略是尝试让一个客户端“猜测”另一个客户端的时钟,包括ping时间。 如果正确的话,他们都会根据猜测开始游戏(因为这个消息已经开启)。 a:发送a.localTime b:收到消息。 返回b.localTime和dTime(ab) a:收到消息。 返回a.localTime和dTime(ba) b:收到消息。 如果a.localTime + dTime(ba)非常接近新的b.localTime,则发送接受消息。 b:在新的b.localTime + 1秒开始游戏 a:接受接受。 在接受的a.localTime + dTime(ba)+ 1s开始游戏 我做了一个小数字柜台的事情去剔,他们只是勉强。 我不明白这是怎么可能的,因为A“猜到”B的时间,他们应该开始在同一时间… 看到我的方法有什么不对吗? 什么是更简单的方法? 我试图避免使用服务器,如果可能的话。