我在轨道上使用ruby创建了一个网站。现在,我需要用flash /动作脚本写一个聊天/游戏,我决定游戏服务器是红宝石(主要是因为我已经有我的AR模型,这是我所知道的语言,因为聊天/游戏主要是IO绑定,它不是计算量很大)。起初我以为我会使用多线程应用程序(使用jruby运行),每个客户端都有一个线程。然后我意识到这将是个坏主意。然后我考虑使用select / kqueue / epoll。我做了我的研究,如果有一个库,如twisted(用于python),但对于ruby,事实证明有EventMachine(它或多或少做同样的事情)。我很难绕着平衡/回调的方式做事,但我猜是好的。但有一件事:我意识到使用ActiveRecord意味着我的数据库查询会阻塞,这是一件坏事。我在线查找“异步ActiveRecord”并发现了一些有趣的东西(异步,永不阻塞,em_postgresql等),但我仍然不知道如何应用它们。如果我理解正确,异步基本上是EM与光纤,这将允许我编写看起来像普通代码的事件代码(有人可以向我解释这个吗?)。我相信,Em_postgresql是(我认为)一个postgresql驱动程序,它使用光纤与异步一起工作。这是对的吗?
我很丢失,我希望有人给我一个基本EM服务器的例子,对postgresql数据库进行非阻塞ActiveRecord调用(主要是因为这是我将要使用的)。
另外,还有一件事我不明白。 EventMachine主要是单线程,但使用线程来推迟。默认的ruby解释器只有绿色线程。 EventMachine如何使用系统线程?是因为它主要是C ++吗?
感谢您的帮助。
答案 0 :(得分:1)
ActiveRecord应该能够在多线程环境中工作。它取决于数据库驱动程序以支持并行执行(mysql2驱动程序即)。