gpt4 book ai didi

ruby - 我应该如何构建我的(moSTLy)基于文本的游戏服务器?

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:30 26 4
gpt4 key购买 nike

想想 MUD/MUCK,但可能还有头像或现场插图。我选择的语言是 ruby

我需要处理多个持久连接,数据在服务器和它的各种客户端之间异步传输。单个数据库必须根据客户端 session 中发生的事件保持最新。每个客户端 session 中的事件可能需要立即更新多个其他客户端(用户进入房间;用户向另一个用户发送私有(private)消息)。

这是一个目标项目一个学习项目,所以我打算重新发明一两个轮子来了解更多关于并发网络编程。但是,我对并发编程和网络编程都不熟悉;以前,我几乎只在 Web 应用程序中的非持久同步 HTTP 请求领域工作。所以,我想确保我正在重新发明正确的轮子。

根据 emboss的出色回答,我已经开始研究某些 HTTP 服务器的内部结构,因为 Web 应用程序通常可以避免线程问题,因为服务器本身将问题抽象得非常彻底。

我不想使用 EventMachine 或 GS​​erver,因为我还不明白它们的作用。一旦我对它们的工作原理、它们解决的问题以及它们的用途有了大致的了解,我就会对它感到满意。我在这里的目标不是“编写游戏”,而是“编写游戏并学习一些较低级别的东西是如何工作的”。我也不清楚某些术语的界限;例如,“I/O 非绑定(bind)应用程序”是“事件驱动应用程序”的超集吗?反之亦然?

我当然对实现我的目标的唯一正确方法感兴趣(如果存在的话),但总的来说,我想了解为什么这是正确的方法,以及为什么其他方法不太可取。 p>

您可以推荐的任何书籍、电子书、在线资源、示例项目或其他花絮都是我真正想要的。

我现在做事的方式是使用IO#select 来阻止连接的套接字列表,超时为0.1 秒。它将读取的任何信息推送到线程安全的读取队列中,然后每当超时时,它都会从线程安全的写入队列中提取数据。我不确定超时是否应该更短。还有第二个线程轮询套接字处理线程的读取队列并处理“请求”。这比我最初的工作方式要好,但仍可能不理想。

我在 Hacker News 上发布了这个问题,并获得了一些我正在研究的资源的链接;任何类似的东西都会很棒:

最佳答案

虽然您可能不喜欢听,但我仍然建议您首先开始研究 HTTP 服务器。尽管为他们编程对你来说似乎很无聊、同步和非持久,但这只是因为服务器的创建者做了他们的工作,非常好地向你隐藏了血淋淋的细节——如果你想一想,一个网络服务器是如此< strong>不同步(并不是说数百万人必须等到你读完这篇文章...并发:) ...并且因为这些野兽做得很好(是的,我知道我们对他们大吼大叫,但归根结底,大多数 HTTP 服务器都是出色的软件)如果您想了解高效的多线程,这是研究的明确起点。操作系统和编程语言或游戏的实现是另一个很好的来源,但可能与您打算实现的目标相去甚远。

如果你真的打算弄脏你的手指,我建议你把自己定位在类似 WEBrick 的地方。首先 - 它与 Ruby 一起发布并且完全在 Ruby 中实现,因此您将在那里学习所有关于 Ruby 线程的概念。但请注意,您永远无法接近 Rack 解决方案的性能,该解决方案位于以 C 语言实现的 Web 服务器之上,例如 thin。 .

所以如果你真的想认真,你必须在 C(++) 中推出你自己的服务器实现,并且可能让它支持 Rack,如果你打算支持 HTTP。我会说这是一项艰巨的任务,特别是如果您希望最终结果具有竞争力。 C 代码可以非常快,但也很容易变得非常慢,这是低级代码的本质。我们还没有讨论内存管理和安全性。但如果这真的是你的愿望,那就去做吧,但我会首先深入研究众所周知的服务器实现以获得灵感。查看它们如何使用线程(池化)以及它们如何实现“ session ”(您想要持久性)。你想要的所有事情都可以用 HTTP 完成,当与一个聪明的 REST 接口(interface)一起使用时甚至更好,支持你提到的所有特性的现有应用程序就是活生生的证明。因此朝这个方向前进并非完全错误。

如果您仍想发明自己的专有协议(protocol),请将其基于 TCP/IP 作为可接受的最低公分母。超越这一点将最终导致您的孙子孙女可能仍在编写的项目。在网络编程方面,这真的是我敢于尝试的最低水平。

无论您是否将其用作库,请查看 EventMachine 及其概念模型。在了解/重新发明正确 轮子的背景下,在您的旅程中忽视事件驱动(“非阻塞”)IO 是一种疏忽。事件驱动编程的开胃菜,将 node.js 的优势解释为 web server .

根据您的要求:异步通信,多个“订阅者”对集中发布的“事件”作出 react ;好吧,这听起来真的很适合 event-driven/message-based建筑学。


一些可能对你的旅程有帮助的书(仅限Linux/C,但概念是通用的):

(那些都是经典)

  • The Linux programming interface - 如果你只想买一本书,就买这本书吧,我还没有完全读完,但它确实令人惊叹,涵盖了你在冒险中需要了解的所有主题

您可能想要查看的项目:

关于ruby - 我应该如何构建我的(moSTLy)基于文本的游戏服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com