美文网首页
ActionCable

ActionCable

作者: kamionayuki | 来源:发表于2016-06-04 20:41 被阅读508次

    ActionCable的理解,分三个步骤:

    1. create a channel,生成一个app/channels/application_cable/products_channel.rb文件
     class ProductsChannel < ActionCable::Channel::Base
        def subscribed
          stream_from "your_products"
        end
     end
    
    1. broadcast some data
     ActionCable.server.broadcast 'your_products', your_data_key: "your data"
    
    1. receive the data,在app/assets/javascripts/products.coffee文件中添加
      App.productsChannel =
         App.cable.subscriptions.create {channel: "ProductsChannel"},
           received: (data) -> $(".store #main").html(data['your_data_key]')
    

    其中:

    • product.coffee文件中的channel: "ProductsChannel"需要对应products_channel文件中的类名ProdcutsChannel
    • products_channel文件中的stream_from "your_products"要对应ActionCable.server.broadcast 'your_products', your_data_key: "your data"中的your_products
    • product.coffee文件中的received: (data) -> $(".store #main").html(data['your_data_key'])要对应ActionCable.server.broadcast 'your_products', your_data_key: "your data"中的your_data_key

    ActionCable可以跟ActionJob一起使用,把broadcast data这一步放在job中,还可以把job放在model的回调方法中。使得整个流程顺畅,广播数据也不会造成堵塞。


    • 可以使用rails generate channel channel_name [method]来生成channel,比如生成channel的时候,还生成了一个叫speak的方法。
    • 在xxx_channel的coffee文件中,@perform speak, data_key: your_pass_data会去调用xxx_channel.rb文件中的speak方法,同时可以将view页面中的内容传递给服务器。例如在speak方法,可以写Message.create! content: your_pass_data['data_key']来创建数据到数据库.

    routes.rb文件中增加一行:mount ActionCable.server => '/cable'
    目的是让cable server在rails进程内。
    在development环境下,不加这一行似乎没有什么影响,不知道在生产环境这一行是否必须要加?


    写得很乱,很零散。具体可以看DHH的视频

    相关文章

      网友评论

          本文标题:ActionCable

          本文链接:https://www.haomeiwen.com/subject/jcgldttx.html