Questions tagged «client-server»

客户端-服务器模型是集中式计算模型,其中一个节点(服务器)为其他节点(客户端)执行某些服务。

11
您如何防止您的JavaScript / HTML5网络游戏被复制或更改?
我正在计划使用JavaScript和HTML5构建的游戏。 我无法理解您如何才能防止某人从Web服务器上简单地复制JavaScript并使用它来制作自己的游戏(这不是我最大的担心),或者替代他们自己的JavaScript功能并在市场中破灭对可靠客户端的希望如果游戏最终要支持多人游戏,那就太疯狂了。 可以采取任何措施阻止任何人阅读JavaScript吗? 如果不是,是否所有游戏处理都应在某处的服务器上进行,而客户的唯一职责是捕获用户输入并绘制图形?

5
游戏中的演员应该负责吸引自己吗?
我对游戏开发非常陌生,但对编程却不是。 我(再次)使用JavaScript的canvas元素在玩Pong类型的游戏。 我创建了一个Paddle具有以下属性的对象... width height x y colour 我也有一个Pong具有诸如...的属性的对象 width height backgroundColour draw()。 该draw()方法当前正在重置canvas,这就是出现问题的地方。 如果Paddle对象具有draw()负责其绘制的方法,或者draw()该Pong对象的负责负责其演员的绘制(我认为这是正确的术语,如果我不正确,请更正我)。 我发现在Paddle实例化两个对象Player和时,绘制自身会很有利Enemy。如果在没有Pong的draw(),我需要两次写类似的代码。 最佳做法是什么? 谢谢。

2
实时FPS游戏向服务器发送什么?
将本地播放器的位置告诉服务器的正确方法是什么?一些文档说,最好在产生输入时发送输入。还有一些文件说,客户以固定的间隔发送其头寸。 使用发送输入方法:如果玩家按住方向键该怎么办?这意味着我需要在每个帧中将包发送到服务器。是不是太多了?鼠标输入还可以播放播放器。这是一个例子: http://www.gabrielgambetta.com/fpm_live.html 如何以固定间隔的方式发送头寸。它向服务器发送的消息太少。但这也会降低响应速度。 那么哪种方法更好呢?

3
MMO中与服务器的低流量客户端同步
我正在实施MMO,玩家将在其飞船上的太空中飞行,并使用箭头键控制它并与其他玩家合作。 我想实现它,以便玩家可以躲避火箭或其他东西躲避飞船,所以我试图使用与服务器使用相同的世界模拟算法来预测客户端的整个游戏状态。该游戏世界是用C#编写的,将直接在客户端内部调用(在Unity3D上编写),并通过C ++服务器上的CLR(在Linux下)调用。通过UDP连接。 问题是如何在单个地图上维护1000名玩家(不包括所有其他游戏对象,生物……):假设我将: 每秒将服务器与客户端同步50次 向每个客户发送他能够看到的游戏对象(和玩家)的状态(在一定范围内) 必须在视野范围内向每个玩家发送100个对象 每个游戏对象必须平均发送50个字节(ID,x,y坐标,旋转,状态...) 因此,它将需要具有这样的网络带宽:1000(客户端)* 50(每秒的次数)* 100(要发送给每个播放器的对象)* 50(每个对象的字节数)=每秒250000000字节!不可能! 是否可以通过某种方式降低此值?例如,让客户端完全模拟他们的游戏世界(很长一段时间),然后仅向其他客户端发送输入并同步游戏世界,比如说,每隔几秒钟,但这会由于浮动计算而导致奇怪的不同步问题。 无论如何,如何以通用方式对此类游戏进行编程?谢谢。

5
mmorpg如何存储数据?
我想在我的server.exe中使用sql数据库。 假设有1000位用户在线。玩家在玩游戏时会更改其数据。服务器需要保存这些更新。 但是如何? 我认为有两种方法: 1)服务器将在运行时保存在ram中,并且有时或每小时服务器将从ram将数据(更新)写入sql数据库。但是,如果断电或服务器关闭,更新将无法保存。当然,我不想丢失更新。 2)服务器将在运行时将更新保存在数据库中。但是速度会怎样?我想到了一种方法。我将在下面显示图片。通过这种方法,我能否为1000名在线玩家获得足够的速度?

3
玩家不可见时如何正确预测动作?
我有一个多人游戏,并且正在做客户端预测,但是有些玩家可以喝一剂药,然后变得看不见... 问题在于,当他们变得不可见时,我不会分享客户可以用来知道他在那里的任何东西,因此,当玩家尝试进入一个不可见的玩家所占据的区域时,他会预测自己成功了,然后得到了服务器发送的丑陋位置校正。 一种解决方案是共享某些内容,以便客户端知道,但是黑客可以使用它来找出隐形玩家所在的位置,并作弊。 顺便说一句,我已经解决了常规运动预测问题,它的工作原理非常完美。

3
为什么在某些MMO中编辑客户的记忆可以使他们作弊?
为什么编辑游戏客户端的内存有效?为什么客户会附带这么多“防黑客”工具? 如果我要设计一个客户端-服务器游戏,那么一切都会在服务器上发生(游戏世界的模拟),而客户端将只是被动的消费者,他们会在角色附近接收世界部分的状态更新,仅发送一些信息,例如击键或移动/操作命令。也许我在这里错过了一些东西,但是通过这种设计,任何将客户端内存中的STR增加200的黑客(如果根本没有这个值的话)都不会产生任何效果。 我能想到的唯一解释是,其中进行内存编辑的游戏允许部分模拟在客户端中运行,然后服务器仅定期同步所有客户端。我可以理解,一旦配置了比赛,针对具有固定数量玩家的实时策略游戏的设计,但是,为什么要使用MMORPG?它是减少服务器负载的策略吗?

6
我有什么托管游戏的选项
免责声明:我知道这个问题开始脱离开发孤岛,但它与游戏开发有关,并且仍然认为这是最佳选择。 我看到了许多免费的MMO /在线桌面客户端游戏。我为这种能力感到困惑。我不介意托管自己,但至少希望有人托管一个婚介服务。如果这些独立开发人员确实在倾注大量资金以减轻服务器负担,那么我会很困惑,但是如果有人可以“向我学习” :)一些替代方案,我将不胜感激。

5
实时策略游戏联网
我正在为我修读的计算机科学课程开发实时策略游戏。它最困难的方面之一似乎是客户端-服务器网络和同步。我已经阅读了这个主题(包括1500个archer),但是我决定采用客户端-服务器方法,而不是其他模型(例如,通过LAN)。 这种实时策略游戏存在一些问题。值得庆幸的是,玩家采取的每项行动都是确定性的。但是,某些事件按计划的时间间隔发生。例如,游戏是由砖块组成的,当玩家拿下一块砖块时,“能量水平”(该砖块上的一个值)在被获取后应该每秒增加一。这是一个非常简短的解释,应该可以证明我的用例。 现在,我正在做瘦客户机,它们只是将数据包发送到服务器并等待响应。但是,有几个问题。 当玩家之间的游戏发展为残局时,每秒通常会有超过50个事件(由于已安排的事件,如前所述,堆积),然后开始显示同步错误。我最大的问题是,即使客户之间的状态偏差很小,也可能意味着客户做出不同的决定,这些决定会滚雪球变成完全独立的游戏。另一个问题(目前还不那么重要)是存在延迟,必须等待几毫秒,甚至是他们采取行动才能看到结果的几秒钟。 我想知道我可以使用什么策略和算法使最终用户更轻松,更快速,更有趣。鉴于每秒发生的事件数量很高,而且每场比赛有几个玩家,因此这特别有趣。 TL; DR以每秒> 50个事件的速度生成RTS,如何同步客户端?

2
如何使Quake 3等精密网络游戏的服务器-客户端时钟保持同步?
我正在研究2D自上而下的射手,并尽力复制类似Quake 3这样的网络游戏中使用的概念。 我有一个权威服务器。 服务器将快照发送到客户端。 快照包含时间戳和实体位置。 实体插值在快照位置之间,因此移动看起来很流畅。 根据需要,实体插值会稍微“过去”发生,因此我们可以在多个快照之间进行插值。 我面临的问题是“时钟同步”。 为了简单起见,让我们假设一下,在与服务器之间传输数据包时,延迟为零。 如果服务器时钟比客户端时钟早60秒,则快照时间戳将比客户端本地时间戳早60000ms。 因此,在客户端看到任何给定的实体进行移动之前,实体快照将收集并静置约60秒钟,因为客户端时钟要花很长时间才能赶上。 通过设法在每次接收快照时计算服务器时钟和客户端时钟之间的差异,我设法解决了这一问题。 // For simplicity, don't worry about latency for now... client_server_clock_delta = snapshot.server_timestamp - client_timestamp; 确定实体插入插值的距离时,我只需将差值添加到客户的当前时间即可。但是,这样做的问题是,由于快照比其他快照更快或更慢地到达,这两个时钟之间的差异将突然波动,这将导致混乱。 如何才能使时钟足够紧密地同步,以使唯一可感知的延迟是硬编码用于插值的延迟,而该延迟是由普通网络延迟引起的? 换句话说,如何在时钟严重失步时防止插值开始得太晚或太早而又不引起混乱呢? 编辑:根据Wikipedia的说法,NTP可以用于在几毫秒内将互联网上的时钟同步。但是,该协议似乎很复杂,也许在游戏中使用会显得过分杀伤力?

3
如何同时有效地编码客户端和服务器?
我正在使用客户端-服务器模型编写游戏代码。在单人游戏上玩时,游戏会启动本地服务器,并像远程服务器(多人游戏)一样与之交互。我这样做是为了避免编写单独的单人和多人代码。 我刚刚开始编码,遇到了一个主要问题。目前,我正在Eclipse中开发游戏,并将所有游戏类组织到软件包中。然后,在服务器代码中,我只使用客户端软件包中的所有类。 问题是,这些客户端类具有特定于呈现的变量,显然不会在服务器上执行。 是否应该创建客户端类的修改版本以在服务器中使用?或者我应该只使用布尔值修改客户端类,以指示其客户端/服务器是否在使用它。我还有其他选择吗?我只是想过也许将服务器类用作核心类,然后通过渲染内容对其进行扩展?

2
我应该如何自动更新整个游戏的文件?
我应该如何自动更新玩家的游戏资产和可执行文件?最好是免费提供更新软件。更新的大小必须很小,并且不能浪费CPU时间。另外,必须很容易地运行更新服务器来创建新版本或进行物流。 我的用例是用于更新玩家游戏的版本,例如在大型在线客户端中或运行分布式游戏测试甚至是普通游戏。

3
我可以统一进行服务器端编程吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我最后一个问题又来了。如果我要用unity3d做客户端/服务器游戏,我是否可以用unity3做服务器端编程?如果不能,我可以使用C#.net吗?如果没有,那么我可以在C ++中使用某种软件包或库吗?通信只是原始套接字吗?

4
套接字服务器和游戏服务器是否应该是独立的进程?
假设一个简单的标准客户端/服务器游戏。对于服务器,是否值得拥有一个单独的进程来侦听客户端的连接和消息,并通过本地套接字或stdin将数据发送到运行实际游戏服务器的另一个进程? 另一种选择是使这两项都在一个过程中完成。对传入的消息进行排队并以正确的顺序执行它们,这不会造成停顿问题。 我想知道将两个“活动”分开的额外资源是否真的值得。我应该如何决定?我想听听任何利弊。

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

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.