Questions tagged «networking»

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

9
将多人游戏添加到HTML5游戏中
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我对制作目前具有合作社经验的游戏感兴趣,但是我对在HTML5中实现这一目标的最佳方法感到好奇。 我在使用直线C插槽之前以及在SDL的Net库中进行过游戏。 在基于画布的环境中执行此操作的最佳选择是什么? 目前,我所能提供的要么是AJAX /数据库解决方案(具有高刷新率),要么是实现以某种方式通过套接字集中数据的PHP服务器。 总体游戏玩法将是2.5D平台式的游戏,因此两个客户都需要不断更新玩家的位置,敌人的位置,射弹,环境数据等。

2
停止播放器时,如何阻止播放器因本地输入预测而漂移?
我正在开发2D服务器-客户端多人游戏引擎(您可以在此处尝试)。它使用WebRTC DataChannel。(连接是对等的,但主机对等方仍充当服务器。) 除了连接性之外,最大的问题是本地输入预测。我们照常做:在按键时,玩家立即移动,告诉主机按下了哪些键,从主机接收回数据并将其与历史位置进行比较。如果存在差异,则随时间校正位置。即使ping高,这在低丢包率或PDV情况下也能很好地工作。 如果存在损耗或PDV,则偏差可能会更大。我认为这是因为,如果第一个指示输入变化的数据包被延迟或丢弃,主机将稍后发现,并在其本地输入条件显示之前开始更改该玩家。 如果玩家正在移动,我们会提高校正的幅度,因为它不太明显。这似乎弥补了开始移动和移动时的空白。但是,如果它们突然停止,则更明显。然后,如果PDV或丢失表示主机认为主机稍后停止,则主机超调,发送回数据,表示主机距离主机稍远,而校正会使播放器稍微偏离一点。在不稳定的连接中,玩家通常在停下来后通常会漂移。 我没有在其他游戏中注意到这一点。如何缓解这种情况?

4
防止玩家在在线FPS中进行黑客入侵?
为什么我们仍然抱怨多人第一人称射击游戏中的墙骇客? 是否有可能在服务器端对所有播放器执行遮挡剔除?例如,仅当播放器在客户端的视锥中可见并且未被任何对象遮挡时,才将播放器xyz信息发送给客户端。即使碰撞几何非常简单,大多数时候作弊者也不会收到战术信息。 为什么不这样做呢?

3
是否存在用于编写通过套接字与n个客户端通信的基于回合的服务器的模式?
我正在使用一种通用游戏服务器,该服务器可以为任意数量的TCP套接字网络客户端在玩游戏时管理游戏。我有一个“设计”与管道胶带一起被破解,但它既脆弱又不灵活。对于如何编写健壮而灵活的客户端/服务器通信,是否存在一种完善的模式?(如果没有,您将如何改善下面的内容?) 大概我有这个: 设置游戏时,服务器为每个玩家套接字提供一个线程,以处理来自客户端的同步请求和来自服务器的响应。 然而,一旦游戏开始,除了一个睡眠之外,所有线程都将循环,并且该线程一次循环遍历所有玩家,以传达有关其行动的信息(反向请求响应)。 这是我目前所拥有的图表;单击以获取较大的版本/可读的版本,或单击66kB PDF。 问题: 它要求玩家用正确的信息准确地依次做出回应。(我想我可以让每位球员随机回应,只有在他们给我有效举动后才继续前进。) 除非轮到他们,否则不允许玩家与服务器交谈。(我可以让服务器向他们发送有关其他播放器的更新,但不处理异步请求。) 最终要求: 性能不是最重要的。这将主要用于非实时游戏,并且主要用于使AI相互对抗,而不是抽动的人。 游戏将始终基于回合制(即使分辨率很高)。每个玩家总是在其他所有玩家获得回合之前获得一招。 服务器服务器的实现恰好在Ruby中,如果有所不同的话。

4
如何保护您的实时在线射击游戏不受潜在机器人的攻击
我正在寻找一个自上而下的多人射击游戏。当我阅读了有关不同主题的文章时,我可以看到他们面临一些实际挑战,但是我全力以赴。 我无法理解的一件事是,我应该如何保护游戏免受尝试创建机器人的人的侵害? 我的意思是,据我所知,以保护玩家无法创建监听正在发生的事情并理解它的程序的方式来保护网络流量是不可能的。 所以让我担心的是,人们可以创建机器人来监听竞争对手玩家的当前位置,并发送模仿玩家的通讯,好像玩家正在精确的“完美”位置射击以赢得比赛。 那么,什么样的技术被用来保护这种机器人的实时游戏呢? 我还要提及的是,我曾尝试搜索讨论(这听起来像很多人都在苦苦挣扎),但没有找到关于它的任何具体信息,只是作为有关实时游戏网络的更广泛问题的一部分。如果我本应该看起来更努力一点,请随时把我放在我的位置:)

3
P2P网络隐藏位置?
我一直在致力于安全游戏的P2P架构,并且已将问题分为五个子问题: 非法修改发送的游戏状态 准确掉落作弊者 同意游戏状态 避免“前瞻”作弊 隐藏对手的敏感信息 我几乎解决了前四个问题,但我遇到的是最后一个问题。 在详细介绍之前,我只想问一下在建立“防欺诈” p2p网络列表中是否缺少任何内容。我对诸如使用aimbots之类的作弊方式不感兴趣,仅对使p2p网络像集中式服务器一样安全不感兴趣。 因此,到目前为止,在隐藏敏感信息方面,我一直专注于游戏中玩家的位置,在这种情况下,对手的位置并不总是应该知道的。然后,问题就变成了如何确定是否应该在不知道对手位置的情况下将位置发送给对手。 我已经排除了诸如对手发送多个错误位置供您比较您的错误位置之类的方法,因为您的对手很容易滥用这样的系统,因为如果其中一个错误位置碰巧从您的位置“可见”,他就会获得您的位置。 我一直专注于一种方法,在这种方法中,您会收到对手的“视野”,从而可以确定您是否应该发送职位。但是,这在英雄联盟之类的游戏中是个问题,在该游戏中,对手的视野也是高度敏感的信息。我试图通过使用奇异矩阵变换视野来解决此问题,这意味着您不能从视野的变换版本返回原始版本,但是由于它是线性变换,因此您仍然可以弄清楚您的位置是否在内部视界与否。 但是,这并不完美,转换后无法恢复确切的视场,但是可以获取有关视场中“坡度”的信息(视场由多条线构成,并且可以确定每条线的斜率)修复后,可以用于相对便宜地重建原始视野。 从本质上讲,我需要的是一个可以确定某个位置是否“可见”的函数,并且重建此函数/视野必须在计算上如此严格,以至于一旦完成重建视野,它就不再与游戏进行中。有没有超级聪明的人碰巧知道这种方法? Edit People对整个“视觉领域”感到有些困惑,因此我打算在这里给出更详细的解释。视野由一组线组组成,您只需检查您的位置在线的哪一侧,即可轻松检查某个位置是否在这些组中,如果您知道该组中所有线的位置在同一侧它在那个小组内部,因此在视野之内。 但是,发送的信息不是此行,而是行的变换和变换(矩阵乘以2 x 2),您仍然可以通过使用接收到的变换首先对其进行变换,以检查位置在行的哪一侧并将该值与转换后的行进行比较。这里的关键是变换是奇异的,这意味着不可能找到逆向返回到原始行。但是,可以通过仅检查变换后的线的哪一侧位于许多点上,直到精确地确定了直线的原点,比不知道的计算便宜得多,从而确定使直线重构的直线的斜率线的斜率。 我正在寻找一种确定点是否在区域内的方法,根据该方法无法重建该区域(我怀疑这种方法存在,因为您总是可以对其进行暴力破解),或者计算量很大。

4
在客户端和服务器上都运行物理模拟?
我正在实施一个多人小行星克隆,以了解游戏中的客户端/服务器网络架构。我花了一些时间阅读GafferOnGames和Valve关于他们的客户端/服务器技术的出版物。我在两个概念上遇到麻烦。 目前,我有一个权威的游戏服务器,使用box2d模拟物理并将每秒大约20次的世界状态发送给客户端。每个客户端都跟踪接收到的最后几个快照,并在两个状态之间进行切换以使Sprite的移动变得平滑。但是,它并不那么顺利。可能会平滑一段时间,然后有点生涩,然后恢复平滑,等等。我尝试过TCP和UDP,两者大致相同。知道我的问题是什么吗?(注意:我首先为单个玩家实现了此功能,当每秒仅更新20次物理世界时,精灵运动在60fps时非常流畅)。 为了解决第一个问题,我认为客户端也应该运行box2d模拟,并仅在不匹配时更新其sprite的位置以匹配服务器快照。我认为这可能会更流畅,因为我的单人游戏实施很流畅。这是一个好主意吗? 即使不能解决上述问题,客户端预测是否也有必要?例如,如果玩家试图移动自己的飞船,他们如何知道是否在没有物理模拟的情况下撞到小行星,墙壁或敌方飞船?似乎他们的飞船似乎通过了应该与之碰撞的物体,然后才从服务器收到快照,说他们击中了该物体。 谢谢!

3
实时多人游戏的Javascript和PHP?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 2年前关闭。 我想知道将Javascript客户端与PHP / mysql服务器端相结合对于HTML5实时多人(小型)浏览器游戏是否是一个好主意? 我的技术知识非常有限,即使我将来打算学习node.js,现在的学习难度也很大。 因为我已经熟悉PHP,所以我认为它的运行速度会更快。 我当时认为的规模是2-8位玩家。并尝试使客户端到服务器的消息计数尽可能少。 我打算存储/处理的值是: 玩家名称和ID。 X和Y位置。 健康。 配备的物品(最多8个插槽,可能更少)。 动作(步行,攻击,使用等,但一次只能有1个动作/玩家)。 项目符号X,Y坐标和轨迹。 公会/氏族名称。 以及一些基本的聊天/邮件功能。 我的猜测是,即使这不是最佳解决方案,但只要我保持逻辑小,这是完全可行的。我对吗?

3
3G网络如何为智能手机分配IP?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 3年前关闭。 我正在使用Android或Iphone在3G网络上玩游戏。假设我正在从一个单元移动到另一个单元;IP地址会改变吗?如果是,那么由于我的IP地址已在游戏服务器中注册,如何在更改基站的同时继续进行同一游戏?是否有DHCP?

1
实施网络平滑
我们正在制作倍增的第一人称射击游戏。客户端将其位置以固定速率(当前为10Hz)发送到服务器。服务器以相同的速率(10Hz)向所有玩家发送一条包含所有玩家位置的消息。 不出所料,由于60fps游戏每秒仅接收10次更新,因此动作非常不稳定。平滑此运动的最佳方法是什么?最明显的方法是在最后两个数据包之间进行插值,以便在收到新数据包时完成插值。但这会为所有播放器增加100ms的即时延迟。 另一种方法是使用从最近几个数据包推断出的速度和加速度来预测玩家在下一个数据包到达之前的位置,但是,如果预测错误,则玩家会在收到新数据包后立即跳起来。 有谁知道AAA标题如何解决这个问题?

3
制作实时多人平台游戏涉及什么?
我正在创建一个具有“合作”功能的平台游戏,我想通过网络/互联网来工作。 现在,我已经阅读了有关网络游戏编程的文章,其中包括诸如每个程序员都需要了解的有关游戏网络的文章,因此我了解了Peer-to-Peer锁步和服务器-客户端预测架构等技术之间的区别: 我得出的结论是,对于将要在互联网上玩的任何实时游戏,“对等”锁步根本不是一种选择。 我还担心即使对于平台游戏者,由于服务器往返的作用和反应之间的延迟,简单的客户端-服务器体系结构(没有某种客户端预测)也会导致游戏性能下降。(话虽如此,我想消除对中央服务器的需求,所以只有其中一个参与者,即客户端,实际上会遇到这种延迟)。 这让客户可以预测,但是即使对于像平台游戏这样的简单游戏,这听起来仍然很复杂。 我将如何为多人平台游戏创建有效的客户预测系统?

4
您如何允许在开发的后期阶段编写网络代码?
我目前正处于编写游戏的早期阶段,最终我希望在很多方面进行改进。 我该如何跳过编写网络代码的过程,却又很容易实现,即不必为了添加游戏而重写整个游戏。 我要记住什么? 我有一个组件模式,可以将物理/碰撞检测,游戏逻辑,数据类型和动画/渲染彼此分离。 如何编写没有实现任何网络代码但可以在本地测试的客户端和服务器? 我应该在客户端中做什么,然后在服务器中做什么?我是否应该假装自己已经完成网络代码,并在服务器和客户端之间发送消息并考虑到延迟等原因,即使没有延迟也是如此? 编辑:计划成为自上而下的RPG。我在想一个简单的多人游戏,在这里为朋友托管服务器,所以作弊并不是什么大问题(谁想和作弊的朋友一起玩?)。我仍然想采用“服务器永远是正确的”方法。 编辑2:我想我正在寻找一些关于我的思维定式的指针。我应该如何处理键盘输入,动画等,而不是立即应用所有效果/更改。嗯,毕竟,我可能需要适当地阅读网络知识,这是我希望通过制作某种可以在本地工作的网络框架来摆脱的东西。

2
如何为联网的实时游戏实现游戏状态快照系统?
我想创建一个简单的客户端-服务器实时多人游戏作为我的网络课程的一个项目。 我已经阅读了很多有关实时多人网络模型的文章,并且了解了客户端和服务器之间的关系以及滞后补偿技术。 我想做的事情类似于Quake 3网络模型:基本上,服务器存储了整个游戏状态的快照;在从客户端接收到输入后,服务器将创建一个反映更改的新快照。然后,它计算新快照和最后一个快照之间的差异,并将它们发送给客户端,以便它们可以同步。 在我看来,这种方法确实很可靠-如果客户端和服务器之间具有稳定的连接,则仅发送少量必需的数据以保持它们同步。如果客户端不同步,则也可以请求完整快照。 但是,我找不到实现快照系统的好方法。我发现很难摆脱单人编程架构,并思考如何以以下方式存储游戏状态: 所有数据与逻辑分离 可以计算游戏状态快照之间的差异 通过代码仍然可以轻松操纵游戏实体 快照类如何实现?实体及其数据如何存储?是否每个客户实体都有一个与服务器上的ID匹配的ID? 快照差异如何计算? 总的来说:游戏状态快照系统将如何实现?

2
如何在大型网络世界中处理实体寻路和运动?
考虑到上面的图像将瓷砖分成32x32的框,我有一个实体被标记为“ aggro”附近的玩家。我希望这个怪物理想地追逐玩家(并继续追逐玩家一段时间)。目前,我的唯一动作是使用一个用于远程实体的简单插补器完成的,这是可行的,因为动作更新之间的差距很小。 我不能成功地仅仅告诉客户怪物想要移动到他/她所处的位置,因为这将导致实体移动得比其应该快得多(这可以通过对插值函数使用一些数学运算来解决) -有效),但更重要的是,它看起来不太现实,可能会夹住墙壁!如果可以避免,我不想在服务器上模拟整个运动……虽然我想我可以,但是仍然不能解决裁剪问题。我怀疑该解决方案涉及一些寻路,并向客户端发送定期的节点更新,并让它们模拟运动,但是我不确定。 谢谢!


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.