Questions tagged «networking»

通过电缆绑定或无线通信链接将两台或更多台计算机连接在一起,以进行信息交换。

2
多人物理网络
我很好奇赛车游戏中如何实现具有物理功能的多人网络。我们拥有一个物理世界,其中有多个由不同人员控制的快速行驶的车辆。假设车辆拥有武器并且可以相互射击(扭曲金属,Vigilante v8) 我担心撞车和撞车。权威服务器还是更好的选择?

3
Node.js的实时多人游戏设计原则
我一直在阅读关于多人网络的Valve 文章,该文章改编自Yahn Bernier在2001年发表的名为“ 客户端/服务器游戏内协议设计和优化中的延迟补偿方法”的论文。我正在使用通过socket.io连接到客户端的node.js服务器制作实时多人游戏,我对以下详述的原理有一些疑问: 实体插值 [插值]通过缓冲服务器更新,然后平滑地插补它们之间的间隔来播放,从而防止通常会引起的抖动。它还可以防止数据包丢失引起的故障。 客户端预测 预测是指客户无需等待服务器确认本地参与者的行为即可对其行为进行预测的概念。当服务器命令到达时,将对实体的预测状态进行测试,直到检测到匹配或不匹配。 滞后补偿 延迟补偿是服务器的一种概念,它在处理[用户输入]时使用播放器的延迟来倒回时间,以便查看播放器在发送命令时看到了什么。与预测相结合,延迟补偿可以帮助将网络延迟降低到从攻击者的角度来看几乎可以消除的水平。 这些原则是否适用于TCP,就像适用于UDP一样,在实现上是否会有任何差异?我可以看到实体插值不需要保护以防止丢包,仅此而已。 我什至可以使用UDP和Node.js在服务器和Web浏览器之间进行通信,反之亦然? 由于该论文已有十多年的历史,这些原理是否仍在使用中?还是出现了其他技术? 任何帮助将非常感激。

1
如何通过网络保持数据结构同步?
语境 在我正在开发的游戏中(一点点点击的图形冒险),游戏世界中发生的几乎所有事情都由动作管理器控制,该动作管理器的结构有点像: 因此,例如,如果检查对象的结果使角色打招呼,走了一下然后坐下,我只需生成以下代码: var actionGroup = actionManager.CreateGroup(); actionGroup.Add(new TalkAction("Guybrush", "Hello there!"); actionGroup.Add(new WalkAction("Guybrush", new Vector2(300, 300)); actionGroup.Add(new SetAnimationAction("Guybrush", "Sit")); 这将创建一个新的操作组(上图中的整行)并将其添加到管理器中。所有组的并行执行,但动作内各组链接在一起,使得第二一个只有第一个完成之后开始。当组中的最后一个动作完成时,该组将被销毁。 问题 现在,我需要在网络上复制此信息,以便在多人游戏会话中,所有玩家都可以看到同一件事。序列化各个动作不是问题。但是,在联网方面,我绝对是初学者,我有几个问题。为了简化讨论,我认为我们可以将动作管理器组件抽象为简单的: var actionManager = new List<List<string>>(); 如何继续使所有播放器之间的上述数据结构的内容保持同步? 除了核心问题之外,我还涉及其他一些问题(即,上述同一问题的所有可能含义): 如果我使用服务器/客户端体系结构(其中一个玩家同时充当服务器和客户端),并且其中一个客户端产生了一组操作,那么他应该将它们直接添加到管理器中,还是只发送请求到服务器,这又将命令每个客户端添加该组? 丢包之类的呢?游戏是确定性的,但我认为客户执行的动作顺序中的任何差异都可能导致世界状态不一致。我该如何防范此类问题? 如果我一次添加太多操作怎么办,这不会引起连接问题吗?有什么缓解的办法吗?

3
回合制棋盘游戏服务器参考?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 关于如何构建回合制游戏服务器,有什么好的参考书/书可供推荐?就像是象棋服务器,用于将象棋玩家配对并保持游戏状态。过去,例如,IGS(for go,weiqi)是基于套接字的实现。有什么可借鉴的当代技术?谢谢!

5
网络层库
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我正在寻找免费的或独立游戏价格合理的任何可添加到我的游戏中的网络层。 网络层是指我可以与之交互的某种库,可以将消息发送到该库或从该库接收消息,并且该库将自行处理所有低层信息。 我特别在寻找: 高质量的库可以理解和处理网络拥塞等复杂问题。 可扩展的库,这将使我有很多玩家一起玩。 最好是对等解决方案,而不是基于服务器的解决方案。 优选地,具有对高级语言(诸如Java或C#)的绑定的库。 我要寻找的示例是Grapple,但是我知道还有其他可用的库。

3
P2P多人游戏与客户端服务器的局限性
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我正在阅读多人游戏架构。 到目前为止,我发现的大多数文章都是关于客户端-服务器模型的。 我想知道使用p2p架构的局限性是什么?可以使用哪些“类”游戏(或更常见的游戏)来实现?不是吗 总体而言,它与客户端-服务器模型的主要区别和局限性是什么?

2
如何用客户端预测来补偿运动对象?
我正在实现一个支持类似Star Control的近战游戏服务器。因此,您有飞船和射击船,它们具有超简单的速度/加速度/减震物理原理来驱动运动。 我已经阅读了Valve,Gafferon和Gambetta,并实现了Gambetta的算法来进行客户预测: 客户端预测通过在服务器上更新其位置来对玩家船进行工作,然后将服务器尚未处理的输入重新应用于玩家船。 不幸的是,它不适用于我的游戏。我认为这与Gambetta的示例没有考虑已经移动的对象或逐步更新的命令有关。(“步”是指帧)。因此,在我的游戏中,玩家抬起脚来加速(已经移动)的飞船,该飞船在客户端上继续移动,将命令发送到服务器,通常在下一步从服务器接收世界快照。我得到更多类似的东西: 该播放器命令在客户端步骤3运行,但在服务器上仅在服务器步骤5运行。到客户端在客户端步骤6接收到世界快照时,该预测已经完成,尤其是在速度更快的情况下。 问题的症结在于客户端在步骤5运行命令,而服务器在步骤6运行命令。我考虑过可能会使用命令发送客户端步骤,并让服务器回滚并使用客户端时间步骤重新运行命令。但是,这可能会导致许多其他问题-例如自回滚以来收到的命令发生了什么,或者作弊客户端如何通过更改发送的步骤来加以利用。 从Google 读取和观看此类视频时,提到了一种不同的方法,您可以逐步更改播放器的位置,以使其与快照的位置匹配。 我的问题: 您能使Gambetta的算法以恒定的步幅运行吗?还是在概念上与我的游戏不兼容? 那么逐步逐步插值是正确的方法吗?如果是这样,您如何从客户位置插值一个已经移动的对象以匹配刚从服务器接收到的对象? 这些方法,渐进插值法和Gambetta算法可以串联使用,还是互斥?

2
如何同步多人游戏中的跳跃等动作?
我是新手游戏开发人员,并且我一直在研究多人游戏。我观察到总会有一些延迟,玩家总是会从过去的动作中获得更新。但是,有诸如航位推测法之类的技术可以处理延迟。我可以预测运动并使运动平稳。但是我将如何使动作同步,例如跳跃,停止行走等。 假设客户A在移动,他以100m / sec的速度在10.2时处于100m并发送了此信息。客户B稍后会收到此信息,设为10.4。因此,在客户端B,我可以使用预测并将客户端A放置在120m处。但是,如果客户在10.3跳到110m,该怎么办?我无法预测,并且由于我一直在使用预测,所以无法显示客户A的过去。 我可能根本不发送跳转动作来解决此问题。但是,如果我的游戏中存在一些空隙,玩家可以跌倒并死亡。因此,如果我不同步跳跃动作,其他玩家将观察到一个玩家在跑步,然后他陷入虚无,然后再次出现在屏幕上,破坏了视觉吸引力。 跳转只是一个例子,可能在许多情况下无法进行预测。因此,如何处理它们。这样的示例之一可以是像Awesomenauts这样的多人在线战斗竞技场游戏。

3
我知道超级简单的多人游戏设置可能不是一个好主意,但是为什么呢?
我正在做一个简单的小MOBA,只是为了好玩。我把所有东西都做成单人游戏,然后我意识到:“糟糕,我应该添加多人游戏,对吧。” 我以前从未进行过联网工作,因此学习如何将Lidgren集成到我的游戏中既有趣又很棒。问题是,据我所知,我几乎知道我做事的方式是错误的,因为据我所知,它不足以使主流游戏使用,但是这又有什么问题呢? 基本上,我正在做的是,只要玩家执行某项操作,它就会向服务器发送一条消息,说“嘿,我刚刚做了这件事”。服务器和客户端都运行相同的模拟。然后,服务器向所有其他客户端发送一条消息,告诉他们该家伙做了那个事情。 在大多数情况下,除了在少数情况下,当玩家做某事时,客户会认为它很酷,并自行进行。因此,当您右键单击某个位置以将其移动到该位置时,该玩家的客户便开始将他的家伙移至该位置,然后向服务器发送一条消息以告知其相关信息。 所以基本上: 玩家1发射一个咒语,使他的移动速度提高100%,持续6秒 玩家1的本地客户将该buff添加到他的Unit对象中 玩家1的客户端向服务器发送一条消息,说“嘿,我刚刚施放了此咒语” 服务器确保他确实有足够的魔法来施放该咒语,如果是,则将该buff添加到该Unit对象的服务器副本中 服务器向所有其他客户端发送一条消息,说“嘿,这个家伙刚刚施了这个咒语” 其他所有客户端都会收到此消息,并“很酷”,然后将该buff添加到该玩家的本地Unit对象中 我一直在浏览一些东西,以了解大型游戏是如何进行多人游戏的,这对于刚开始涉足此游戏的人来说有点令人困惑,但是看起来Source引擎发送了一个包含所有更改的数据包。世界每一刻?再说一遍,对于这些东西来说是全新的,但是您真的可以经常推送那么多数据吗? 抱歉,这有点不合理,但是基本上,我想知道为什么我的简单系统不是正确的方法,因为如果是这样,其他游戏会使用它,对吗?

3
使用Bullet时,物理无法通过网络正确同步
我正在尝试使用Bullet实现客户端/服务器物理系统,但是我在使事物同步方面遇到问题。 我实现了一个自定义运动状态,该状态可以从我的游戏对象读取和写入转换,并且可以在本地运行,但是我尝试了两种不同的网络游戏方法: 使客户端上也在服务器上的动态对象(例如,不是随机碎片和其他不重要的东西)成为运动学对象。这可以正常工作,但对象移动得不太平稳 对象在这两者上都是动态的,但是在服务器发出的每个对象移动的消息之后,我将线速度和角速度设置为服务器上的值,并使用服务器上的转换调用btRigidBody :: proceedToTransform。我也叫btCollisionObject :: activate(true); 强制更新对象。 我对方法2的意图是基本上执行方法1,但是劫持Bullet进行穷人的预测,而不是自己动手解决方法1,但这似乎行不通(原因并非100%明确我什至单步执行“项目符号”,并且有时这些对象最终会出现在不同的位置。 我朝着正确的方向前进吗?Bullet似乎内置了自己的插值代码。那可以帮助我使方法1更好地工作吗?还是我的方法2代码不起作用,因为我不小心踩了它? 编辑:我刚刚注意到的方法1的另一个问题是,碰撞响应将与非同步对象发生碰撞。动能体有时会射出无限的东西,因为它们无法被击退。

1
由于网络集成,我是否应该编写自己的物理引擎?
我目前正在开发自上而下的实时僵尸射击游戏。我正在使用JBox2D作为我的物理引擎用Java编写此代码。我本周一直在编写网络代码,现在可以进行物理同步了​​。 我打算使用预测性客户端/权威服务器模型,只要服务器稍后批准,客户端就可以自由移动。这涉及到客户端向服务器发送包含运动数据的数据包,服务器计算延迟,并从较早的状态重新模拟环境。 我的问题是,我当前的物理引擎JBox2D(基本上是Box2D的端口)不支持回滚世界,而且显然不容易序列化世界数据。我有2个解决方案,可以修改/扩展当前的物理引擎,也可以编写自己的引擎。 编写我自己的物理引擎的原因- 我可以删除不必要的功能。在自上而下的游戏中,我真的只需要碰撞机制和处理力。不涉及重力。 我可以更好地理解代码,并且[最有可能]更容易实现回滚功能 扩展/修改JBox2D的原因 编写我自己的物理引擎将是大量的工作,可能会很麻烦 JBox2D有一个广泛支持的社区,可以为我的开发人员提供帮助 JBox2D针对碰撞检测等方面进行了特定的优化,使其非常有用 已经完成了一些工作,但是几乎没有共享代码 那您有什么意见。这是我的第一款游戏,我绝对不是专业的游戏开发商。如果有人可以提供一些指向该地区已经完成的工作的链接(最好使用JBox2D / Box2D / Java)。

3
多人实时安卓游戏的最佳解决方案
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 5年前关闭。 我打算为Android(2-8个玩家)制作多人实时游戏,并且我认为哪种组织最佳的解决方案是最好的: 使服务器在PC上,客户端在移动设备上,所有通讯都通过服务器(ClientA-> PC SERVER->所有客户端) 使用蓝牙,我还没用过,我也不知道在蓝牙上制作多人游戏很难 使服务器位于其中一台设备上,并与其他设备连接(通过网络,但是我不知道通过NAT解决设备的问题是否很困难?) 其他解决方案?


2
XNA和Xbox 360可以联网吗?
我知道Xbox 360的XNA只能访问网络,据传它仅允许通过Microsoft协议与其他Xbox 360进行通信。 XNA提供哪些联网可能性?多少个Xbox 360单元可以连接到同一子网?最多16个?任何Xbox都可以像对等通信一样将数据发送到子网上的任何其他Xbox?Xbox也可以与Windows PC上的XNA通信吗?您还可以与其他设备通信吗? 那游戏服务器呢?您可以设置自己的多人游戏服务器并让Xbox与之连接并自由通信吗?您将在哪个平台上编写游戏服务器代码?Unix上的C ++?一次可以有多少Xbox单元连接到服务器?如果您无法设置自己的游戏服务器,是否有非官方的“黑客”使独立开发人员能够开发和运行游戏服务器? 由于我不是Xbox开发人员(即,我没有10000美元的devkit),所以我不能使用Coid库,例如Zoidcom。

4
同时使用TCP和UDP是否有意义?
读完之后对于大量数据实时游戏,UDP是否仍然优于TCP?,我想知道同时使用TCP和UDP是否有意义,但是对于不同的事物: TCP,用于发送很少发送的信息,但应确保可靠到达。 例如分数更新,玩家的名字,甚至是游戏世界中灯光的开/关状态。 UDP用于传输不断更新的信息,有时可能会丢失,因为总是有更新的信息出现。 例如位置,旋转度等 这是一个合理的主意吗?可能的缺点是什么? 有更好的方法来解决这个问题吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.