gpt4 book ai didi

ruby-on-rails - 使用 EventMachine 的 Rails 应用程序是否可以进行长轮询?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:31 25 4
gpt4 key购买 nike

我正在用 Rails 3.1 编写一个简单的聊天室应用程序 - 用于学习目的。对于初学者来说,我拥有所有需要的模型(消息、用户、房间等)并且一切正常。客户端每分钟(例如)轮询服务器并获取新消息(如果有)。

我想将简单轮询更改为长轮询,但不知道这是否可以在同一个应用程序中完成,或者我是否必须为长轮询创建其他推送服务器。

我阅读了很多关于 EventMachine 的文章,并更改了我的 Rails 应用程序以使用它,因为我想将 EventMachine 用于事件驱动机制。我认为 EventMachine channel 会为此派上用场。客户端将连接并等待聊天室中的消息,只有当消息被发送到聊天室时,它才会收到消息。

我想不通的是如何在所有客户端连接之间共享 EventMachine::Channel 实例。这种方法是否可行,还是我采用了错误的方法?

如果可能的话,我想要一个可以作为托管在 Heroku 上的单个 Rails 应用程序运行的解决方案。

最佳答案

当然可以。我刚刚使用事件机编写了一个演示。我的情况是玩家在 map 上走动,其他玩家应该能够看到它。演示看起来像这样:

  1. 客户端建立连接,报告自己的坐标(随机生成)

  2. 有一个数组保存每个客户端的所有坐标

  3. 当客户端移动时,它会将其新坐标发送到服务器。然后服务器(从数组中)找出他附近的人,并将新坐标推送给那些客户端。

我对近 5000 个客户端进行了测试,每秒有 20-30 个玩家移动它的位置。服务器进程只占用不到 100M 的内存和 50%-60% 的 CPU 使用率(在单核上)。

对于您的情况,我认为您也应该试试 faye。它基于事件机器,是聊天室等问题的适当解决方案。

关于ruby-on-rails - 使用 EventMachine 的 Rails 应用程序是否可以进行长轮询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225993/

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