【问题标题】:Rails 4 Live StreamingRails 4 直播
【发布时间】:2013-01-25 16:00:05
【问题描述】:

我正在关注这个 railscast,它解释了如何实现聊天应用程序。我一步一步地遵循了一切,它似乎一直在工作,直到我开始使用 redis 发布/订阅版本以使其更快,但我的应用程序现在没有更新聊天。每次有新消息进来我都必须刷新页面!

这是我的代码:

class MessagesController < ApplicationController
    include ActionController::Live

  def index
    @messages = Message.all
  end

  def create
    response.headers["Content-Type"] = "text/javascript"
    @message = Message.create!(params[:message].permit(:content, :name))
    $redis.publish('messages.create',@message.to_json)
  end

  def events   
    response.headers["Content-Type"] = "text/event-stream"
    redis=Redis.new
    redis.psubscribe('messages.create') do |on|
      on.pmessage do |pattern, event, data|
       response.stream.write("event: #{event}\n")
      end
    end
    rescue IOError
      logger.info "Stream closed"
    ensure
      redis.quit
      response.stream.close  
    end
end

在消息/index.html.erb 中

<h1>Chat</h1>

<ul id="chat">
  <%= render @messages %>
</ul>

<%= form_for Message.new, remote: true do |f| %>
  <%= f.text_field :name, placeholder: "Name" %>
  <%= f.text_field :content %>
  <%= f.submit "Send" %>
<% end %>

我在 assets/javascript 文件夹中有一个 .js 文件,负责监听服务器事件。

var evnt = new EventSource('/messages/events');

evnt.addEventListener('messages.create', function(e){
  var message;
  message = $.parseJSON(e.data).message;
  return $('#chat').append($('<li>').text("" + message.name + ": " + message.content));
});

我正在像这样在一个单独的终端上启动 redis-server

$: redis-server

我没有使用 brew 安装 redis,只是下载了一个 tar 文件并解压了它。系统可以识别,应该没问题。

当我尝试使用该应用程序时,它不会使用新消息更新聊天。我需要刷新页面以使它们显示。有什么帮助吗?

【问题讨论】:

    标签: ruby ruby-on-rails-3 redis railscasts ruby-on-rails-4


    【解决方案1】:

    似乎您没有将任何数据写入流,只有事件类型。

    redis.psubscribe('messages.*') do |on|
      on.pmessage do |pattern, event, data|
        response.stream.write("event: #{event}\n")
        response.stream.write("data: #{data}\n\n") # You are missing this line.
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多