Ruby on rails Rails的事件侦听器

Ruby on rails Rails的事件侦听器,ruby-on-rails,ajax,ruby-on-rails-4,Ruby On Rails,Ajax,Ruby On Rails 4,我想尝试制作一个简单的实时聊天Rails web应用程序,但我想我需要某种让我们称之为“事件监听器”的东西,以便能够跟踪发送的消息,从而使用新消息更新接收方用户的提要。另外,对于键入…通知框 我希望我能解释清楚 我想我可以用一种非常简单的方法来实现这一点,如下所示: main.js: while(true) { $.get('/user-you-are-talking-to/are-there-new-messages', function(data) { if (dat

我想尝试制作一个简单的实时聊天Rails web应用程序,但我想我需要某种让我们称之为“事件监听器”的东西,以便能够跟踪发送的消息,从而使用新消息更新接收方用户的提要。另外,对于
键入…
通知框

我希望我能解释清楚

我想我可以用一种非常简单的方法来实现这一点,如下所示:

main.js

while(true) {
    $.get('/user-you-are-talking-to/are-there-new-messages', function(data) {
        if (data['are_there_new_messages'] === true) {
            $('#conversation').append(data['new_message']);
        }
    });
}
对话\u controller.rb

# routed by /user-you-are-talking-to/are-there-new-messages'
def new_messages?
    unless @new_messages.blank?
        @json = []
        @json[:are_there_new_messages] = @new_messages.count > 0
        @json[:new_message]= @new_messages.shift
        render json: @json
    end
end
但是,除了我没有测试代码这一事实之外,很明显,一个while循环和对服务器的持续请求似乎是一个非常糟糕的主意


我想知道Rails是否有这样的内置功能,但据我所知,它没有,不像我使用过的框架,比如Laravel。如果没有用于此功能的内置工具,如何使用此应用程序?

实时应用程序通常使用WebSocket完成

或者,如果在托管服务上,您可以使用发布/订阅服务,如Pusher或PubNub

否则,您将执行示例中的轮询。

Rails 5将附带:

Action Cable将WebSocket与Rails应用程序的其余部分无缝集成。它允许实时功能以与Rails应用程序其余部分相同的风格和形式用Ruby编写,同时仍然具有良好的性能和可扩展性。它是一个完整的堆栈产品,提供客户端JavaScript框架和服务器端Ruby框架。您可以访问使用ActiveRecord或您选择的ORM编写的完整域模型

但在等待的同时,您可以使用许多现有的解决方案,其中一些@dinomix列出了


另一个选项是(从未使用过,但听说过好东西)。

我不熟悉这些,您能给我举一个简单的例子说明库和websocket服务器是如何工作的吗?后来呢。。。此服务器是否应替换我用于Rails应用程序的服务器?例如,当我只是为了好玩而制作应用程序时,我使用集成的web服务器webrick。或者这与此无关?我对这些概念有点困惑。@dabadaba:我想知道,他们自述中的例子不够清楚吗?是的,为了处理WebSocket,人们通常使用一个单独的服务器,这一功能更强。当然不是webrick。不,我不明白这些代码中发生了什么。@dabadaba:是的,事件I/O是非常重要的:)我在java中见过它,但很久以前,我真的不知道如何在Rails应用程序中集成它……这就是我所说的内置功能;)不过,我们必须等待。谢谢你的信息。在发布这篇文章之前,我正在寻找rails聊天教程,并找到了一个使用Faye的教程。一定会解决的。