1. 介绍

    本来是要先写ActionCable的,不过在写ActionCable之前,先来写写message_bus。它不是websocket的内容,但它在ActionCable出现之前用得蛮多,以后可能会少用了,但它还是一个优秀的gem。
    message_bus的机制是轮循,长循环,或者EventSource相关的,它在前后端都进行了整合,很方便使用。如果在以前要自己手动使用轮循机制,可能得手动写一些js代码,然而message_bus不仅在js端进行了封装,在后端也提供了一种叫pub/sub的机制,理解了message_bus,也能更好的理解ActionCable,因为很概念是互通的。

    1. 使用

    我们还是来实现之前的聊天室来例子,来玩一下message_bus。
    安装。

    1. gem 'message_bus'
    2. gem 'puma'

    添加app/controllers/chat_controller.rb文件,内容如下:

    1. class ChatController < ApplicationController
    2. def chat
    3. MessageBus.publish "/channel", params[:text]
    4. head 200, content_type: "text/html"
    5. end
    6. end

    主要是MessageBus.publish “/channel”, params[:text]这一行,表示向/channel这个通道推送params[:text]参数中的数据。
    在config/routes.rb中添加路由。

    1. Rails.application.routes.draw do
    2. post "/chat", to: "chat#chat"
    3. end

    分别添加view和js。

    1. h1 Tubesock Chat
    2. pre id="output"
    3. = form_tag "/chat", class: "chat", remote: true
    4. input placeholder="hello world" autofocus=true name="text"
    5. MessageBus.start()
    6. MessageBus.callbackInterval = 500
    7. MessageBus.subscribe "/channel", (data) ->
    8. $("#output").append "#{data}<br>"

    MessageBus.subscribe “/channel”表示订阅服务器端推送过来的通道的数据,还有,callbackInterval表示的是轮循的时间。
    最后的效果如下:
    7、message_bus - 图1

    本篇完结。