首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4 Live Streaming

Rails 4 Live Streaming
EN

Stack Overflow用户
提问于 2013-01-26 00:00:05
回答 1查看 1.1K关注 0票数 0

我正在关注这个铁路广播,它解释了如何实现一个聊天应用程序。我已经一步一步地跟踪了所有的事情,直到我开始使用发布/订阅版本的redis来使它更快之前,它似乎都是有效的,但是我的应用程序现在没有更新聊天。每次有新的消息进来,我都要刷新页面!

下面是我的代码:

代码语言:javascript
复制
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

在messages/index.html.erb中

代码语言:javascript
复制
<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文件,它负责监听服务器事件。

代码语言:javascript
复制
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,如下所示

代码语言:javascript
复制
$: redis-server

我没有使用brew安装redis,我只是下载了tar文件并解压缩它。它被系统识别,所以它应该是正常的。

当我尝试该应用程序时,它没有用新消息更新聊天记录。我需要刷新页面才能显示它们。有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 00:05:30

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

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14525464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档