我想尝试制作一个简单的实时聊天Rails网络应用程序,但我想我需要某种让我们称之为"事件监听器"能够跟踪已发送的消息,以便接收者用户的提要更新新消息。另外,对于Typing...
通知框。
我希望自己解释一下。
我想我可以用非常troglodyte的方式来实现这一点,如下所示:
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']);
}
});
}
conversation_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这样的框架不同。如果没有内置工具,我该怎么办这个应用程序?
答案 0 :(得分:1)
实时应用程序通常使用websockets完成。
https://github.com/eventmachine/eventmachine
https://github.com/igrigorik/em-websocket
或者,如果在托管服务上,您可以使用发布/订阅服务,例如Pusher或PubNub。
否则,您将进行轮询,这是您的示例中的内容。
答案 1 :(得分:1)
Rails 5将附带Action Cable:
Action Cable将websockets与Rails应用程序的其余部分无缝集成。它允许以与Rails应用程序的其余部分相同的样式和形式在Ruby中编写实时功能,同时仍然具有高性能和可伸缩性。它是一个提供客户端JavaScript框架和服务器端Ruby框架的全栈产品。您可以访问使用ActiveRecord或您选择的ORM编写的完整域模型。
但是,当您等待它时,您可以使用许多现有的解决方案,其中一些解决方案已列出。
另一种选择是Faye(从未使用过,但听过好话)。