1

我使用 ruby​​ on rails 创建了一个网站。现在,我需要在 flash/action 脚本中编写一个聊天/游戏,我决定游戏服务器将使用 ruby​​(主要是因为我已经有了我的 AR 模型,这是一种我知道的语言,并且因为主要受 IO 限制,计算量不大)。起初我以为我会使用多线程应用程序(使用 jruby 运行),每个客户端都有一个线程。然后我意识到这将是一个坏主意。然后我考虑使用 select/kqueue/epoll。我研究了是否有一个库,比如twisted(用于python)但用于ruby,结果发现有EventMachine(它或多或少做同样的事情)。我很难理解事件/回调的做事方式,但我想我会没事的。不过有一件事:我意识到使用 ActiveRecord 意味着我的数据库查询会阻塞,这是一件坏事。我在网上查了“异步ActiveRecord”,发现了一些有趣的东西(异步、neverblock、em_postgresql等),但我仍然不知道如何应用它们。如果我理解正确,异步基本上是带有光纤的 EM,这将允许我编写看起来像普通代码的事件代码(有人可以向我解释一下吗?)。Em_postgresql 是(我认为)一个 postgresql 驱动程序,它使用纤程与异步一起工作,我相信。那是对的吗?异步基本上是带有光纤的 EM,这将允许我编写看起来像普通代码的事件代码(有人可以向我解释一下吗?)。Em_postgresql 是(我认为)一个 postgresql 驱动程序,它使用纤程与异步一起工作,我相信。那是对的吗?异步基本上是带有光纤的 EM,这将允许我编写看起来像普通代码的事件代码(有人可以向我解释一下吗?)。Em_postgresql 是(我认为)一个 postgresql 驱动程序,它使用纤程与异步一起工作,我相信。那是对的吗?

我很迷茫,我希望有人给我一个基本 EM 服务器的示例,该服务器对 postgresql 数据库进行非阻塞 ActiveRecord 调用(主要是因为这是我将使用的)。

另外,还有一件事我不明白。EventMachine 主要是单线程的,但使用线程进行延迟。默认的 ruby​​ 解释器只有绿色线程。EventMachine 如何使用系统线程?是因为它主要是C++吗?

谢谢你的帮助。

4

1 回答 1

1

ActiveRecord 应该能够在多线程环境中工作。它依赖于数据库驱动程序来支持并行执行(mysql2驱动程序ie)。

于 2013-06-01T21:43:44.110 回答