问题标签 [online-game]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2295 浏览

java - 我应该用 Erlang 编写自己的闪存服务器还是使用 Red5?

我是一名学生,即将开始我的考试项目,我将负责针对 Flash 播放器的在线游戏的服务器实现。我很难决定是应该用 Erlang 编写自己的轻量级服务器还是使用开源 Red5。

我的经验是,Java 开发人员倾向于过度复杂化使 API 难以使用的事情,这对 Red5 来说是真的吗?它在同步游戏带来的繁重负载下表现如何?

也许我自己的 Erlang 服务器会更容易在多台机器上使用和分发?

所以问题是我应该编写自己的 Erlang 闪存服务器还是使用现有的 Red5?

编辑:我想我需要决定我的目标是什么:只是建立一个在线游戏或学习如何从头开始实现多用户服务器。

0 投票
2 回答
802 浏览

php - 基于套接字的 PHP-Flash 通信

亲爱的开发人员,一天中的美好时光!

我不是任何一种网络编程专业人士,但碰巧我不得不在 php 上开发套接字服务器(无法使用 Java),用于 Flash 多人浏览器游戏(标准功能,如位置、团队战斗等)。


主要问题是TCP是点对点协议,它完全占用给定端口。

当然,可以创建某种队列来管理与套接字的连接,但这种解决方案似乎不是最合适的。

在我看来,使用“公平”端口的间隔(例如,从 2000 到 2200)是更合适的解决方案,因为一个请求可能需要很长时间才能执行,并且玩家不会乐意在队列中等待。

但是我该如何实施这种“端口间隔”策略呢?我看到的解决方案是:

  • 每个端口启动 php-script(嘿嘿,2 数百个已启动的脚本!);

  • 以某种方式将初始进程分叉到新进程(2 数百个已处理?也不好),每个端口一个;

  • 额外的while循环,它监听所有端口(看起来很糟糕);
  • 使用线程或类似的东西(据我所知,问题是php是单线程的;pcntl?)。

但不知何故,我不喜欢它们中的任何一个,或者至少不知道如何以最好的方式实现它们。

没有延迟地处理每个时间单位来自多个用户的多个请求的最佳现有策略是什么,以及如何在 php 中实现此策略?我们有自己的 Debian 服务器,因此可以使用任何所需的 php 扩展。

高度赞赏有关此类系统的开发、规划和实施的任何建议。

谢谢你!


编辑1: 顺便说一句,我忘了提一些额外的细节。

例如,如果我们正在尝试开发聊天应用程序,我们需要为每个用户提供某种固定的(我的意思是持久的)连接。例如,我们有 80 个用户在聊天,然后其中一个人发布了一条消息,该服务器尝试处理并发送给所有其他连接的用户,还将一个条目放入历史文件或类似的东西。

在这种情况下,每 10 秒轮询一次服务器以获取来自 80 个用户中的每个用户的新消息是疯狂的,因此持久连接的需求变得显而易见。但考虑到并非所有请求都是即时处理的,我不知道实现此类事情的最佳方法是什么。

0 投票
15 回答
7775 浏览

chess - 防止在线棋牌游戏作弊?

在许多在线国际象棋大厅中,我看到了“引擎”的实例,作弊者会在主游戏窗口的同时打开一个国际象棋程序。然后他会设置它,以便将对手的动作转发到计算机,然后他将复制计算机的动作,直到他(几乎总是)获胜。

作为游戏开发者和版主,遇到这种情况该怎么办?

0 投票
4 回答
2331 浏览

php - 如何实时更新Travian游戏中的4资源等浏览器游戏属性?

我想制作一款类似 Travian(或类似 Ikariam)的网络游戏。游戏将基于 PHP 和 MySQL。我想知道如何实现游戏属性的实时更新。

对于前端,我可以通过使用 AJAX 调用(从数据库中获取最新值),甚至是伪造的值更新(不与服务器通信)来实现。

对于后端,这是由 PHP cron 作业(每隔几秒运行一次)完成的吗?如果是这样,谁能给我一些示例代码?

顺便说一句,我知道如果我使用 IIS + FastCGI 会很麻烦。

=== 版本信息 ===

PHP : 5.2.3

IIS : 6.0 与 FastCGI

操作系统:Windows Server 2003 标准 R2

0 投票
8 回答
3655 浏览

java - 为什么(几乎)所有用 ActionScript (Flash) 编写的在线游戏都不是 Java?

我绝对喜欢优秀的防守游戏(例如 Gemcraft、Protector:夺回王位),因为它们在智力上非常具有挑战性;这就像下国际象棋,但少一点思考,多一点行动。可悲的是,那里没有那么多好的,我想我会自己创造一个,并通过在线提供它与世界其他地方分享。

我从来没有使用过 ActionScript,但是当谈到在线游戏时,这是主要的选择。我试图以 Java 小程序的形式找到一个像样的 2D 游戏,但无济于事。为什么会这样?我可以在 Win32 的 Delphi 中轻松编写游戏,但是人们需要下载可执行文件,这可能会阻止某种形式的下载,而且它只能在 Windows 上运行。我也熟悉Java,过去四年左右一直在使用Java;虽然,我没有太多的游戏编程经验。

我是否应该被所有在线游戏都用 Flash 编写并将我的防守游戏创建为 Java 小程序这一事实吓倒,或者我是否应该考虑学习 ActionScript 和 ActionScript 虚拟机的游戏开发(AS3 看起来非常Java ...但是,这对我来说是一项全新的技术,我可能永远不会专业地使用它。)

请您回答标题中的问题好吗?为什么是 Flash,而不是 Java 小程序?仅仅是“政治”吗?

0 投票
3 回答
12109 浏览

game-engine - 网络游戏客户端如何能够如此快速地通过互联网交换数据?

让我们想象一下非常简单的游戏......我们有一个迷宫和两个玩家试图通过互联网实时找出出口。

每次移动游戏客户端都应该将玩家的坐标发送到服务器并接受另一个客户端的当前坐标。怎么可能使这种交换如此之快(就像所有现代游戏一样)。

好的,我们可以使用 memcache 或类似的技术来减少服务器端的数据挖掘操​​作。我们也可以使用最快的网络服务器等,但我们仍然会遇到时间问题。

所以,问题是...

  1. 游戏客户端通常使用什么协议与服务器交换信息?
  2. 有哪些服务器技术可以解决这个问题?
  3. 什么算法适用于游戏中的延迟战斗等。
0 投票
6 回答
10751 浏览

c# - 如何编写基于网络浏览器的多人游戏?

如果我想编写基于桌面的游戏,我可以提取一些 XNA 代码和 UDP 套接字并制作一个不错的多人游戏。我会非常清楚如何编写我想要的游戏。

但是如果我想编写一个基于浏览器的在线多人游戏,我该怎么做呢?你不能使用 XNA ......我一直在研究一些问题,我看到 PHP 和 ASP.NET 和 Silverlight 以及 Flash 和 Java 作为替代语言......我真的不明白它是如何工作的. 我的意思是,对于基于桌面的游戏,您正在打开一个 UDP 套接字并接受客户端并传输数据、更新玩家状态、使用 XNA 绘制结果。但是在浏览器中,你如何打开一个套接字之类的东西?这个概念是如何运作的,通过网络浏览器与人们实时交流。有什么方向吗?我熟悉 C#,对 Java 半熟悉。从未做过任何 Flash、ASP.NET 或 Silverlight。

0 投票
1 回答
1550 浏览

asp.net-mvc-3 - 使用 .net 技术的在线游戏

我是游戏开发的新手,但我正在考虑使用用于 ORM 数据映射的实体框架和用于数据数据存储的 SQL Server 2008 DB 在 asp.net mvc3 上创建在线浏览器游戏。我想听听你对此的看法。这种方法有什么优点和缺点。为什么它比使用经典 LAMP 更糟糕。

0 投票
1 回答
803 浏览

java - 将 Adob​​e Flash 播放器嵌入到基于 Java 的桌面应用程序中

如何在基于 java 的桌面应用程序中嵌入 adobe flash 播放器?我可以在其中加载和运行在线 Flash 游戏吗?

谢谢。

0 投票
1 回答
839 浏览

javascript - 在线游戏中实时同步多用户数据的设计模式建议

我正在研究一个学习 node.js 的项目,并且正在寻找一些关于如何实时处理同步用户数据的建议。

假设您有一个 2D 矩形地图(大约 600x400),许多玩家占据该地图上的 x,y 位置。每个用户都可以使用箭头键导航并以某种基本方式与其他用户交互。鉴于这将通过 HTTP 播放,那么在处理和同步用户数据以提供最流畅、最快速的体验方面,最好的设计模式是什么?

我可以想到几个选项,但希望有更多的想法/澄清:

  1. 客户端将位置数据发送到服务器,服务器将所有位置分配给所有客户端,屏幕呈现结果。重复。不利的一面是客户端会滞后于数据往返所需的时间,但好处是它们与所有用户同步。

  2. 客户端在它认为的位置不断渲染,将位置数据发送到服务器,服务器将所有位置分配给所有客户端,然后使用服务器数据更正来自客户端数据的屏幕渲染。上行是更快速的响应,下行是稍微失去同步。

  3. 两者的混合,但我们不使用 (x,y) 坐标,而是使用 [先前的 x/y 和时间,当前的 x/y 和时间,建议的时间间隔的 x/y] 的向量,然后可以用于绘制不断变化的射弹路径。这似乎很难实现。

任何指针?