Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Cara menggunakan ActionController::Live bersama Resque + Redis (untuk aplikasi Chat)

Persyaratan Sebelumnya:

  • Ruby 2.0.0+
  • Rel 4.0.0+
  • Merah
  • Puma

Inisialisasi:

Buat redis.rb file penginisialisasi di config/initializers direktori, mengglobalkan instance redis . Ini juga merupakan ide yang baik untuk mengatur heartbeat utas (Apa pun dari 5 detik hingga 5 menit tidak apa-apa, tergantung pada kebutuhan Anda):

$redis = Redis.new

heartbeat_thread = Thread.new do
  while true
    $redis.publish("heartbeat","thump")
    sleep 15.seconds
  end
end

at_exit do
  heartbeat_thread.kill
  $redis.quit
end

Pengontrol:

Anda perlu menambahkan dua metode ke ChatController Anda , pub dan sub . Peran pub adalah untuk memublikasikan acara obrolan dan pesan ke redis , dan sub untuk berlangganan acara ini. Seharusnya terlihat seperti ini:

class ChatController < ApplicationController
    include ActionController::Live

    skip_before_filter  :verify_authenticity_token

    def index
    end

    def pub
        $redis.publish 'chat_event', params[:chat_data].to_json
        render json: {}, status: 200
    end

    def sub
        response.headers["Content-Type"] = "text/event-stream"

        redis = Redis.new
        redis.subscribe(['chat_event', 'heartbeat']) do |on|
            on.message do |event, data|
                response.stream.write "event: #{event}\ndata: #{data}\n\n"
            end
        end
    rescue IOError
        logger.info "Stream Closed"
    ensure
        redis.quit
        response.stream.close
    end
end

Di routes . Anda , buat pub sebuah POST dan sub sebuah GET , dan cocokkan jalurnya dengan sesuatu seperti /chat/publish dan /chat/subscribe .

Coffeescript / Javascript:

Dengan asumsi halaman web Anda yang sebenarnya untuk aplikasi obrolan ada di /chat , Anda perlu menulis beberapa Javascript untuk benar-benar mengirim dan menerima pesan obrolan.

Untuk memudahkan pemahaman, anggaplah halaman web Anda hanya memiliki kotak teks dan tombol. Menekan tombol akan mempublikasikan konten kotak teks ke aliran obrolan, kita dapat melakukannya menggunakan AJAX:

$('button#send').click (e) ->
    e.preventDefault()
    $.ajax '/chat/publish',
        type: 'POST'
        data:
            chat_data: {
                message: $("input#message").val()
                timestamp: $.now()
        error: (jqXHR, textStatus, errorThrown) ->
            console.log "Failed: " + textStatus 
        success: (data, textStatus, jqXHR) ->
            console.log "Success: " + textStatus

Sekarang, Anda harus dapat berlangganan dan menerima pesan obrolan juga. Anda perlu menggunakan EventSource untuk ini. Menggunakan EventSource , buka saluran untuk SSE sehingga Anda dapat menerima acara, dan menggunakan data tersebut untuk memperbarui tampilan. Dalam contoh ini, kami hanya akan mencatatnya ke konsol javascript.

Kodenya akan terlihat seperti ini:

$(document).ready ->
    source = new EventSource('/chat/subscribe')
    source.addEventListener 'chat_event', (e) ->
        console.log(e.data)

Catatan: Tempatkan kedua blok kode di atas di controllername.coffee your Anda file, untuk contoh ini seharusnya chat.js.coffee di app/assets/javascript direktori. Anda juga perlu memastikan itu sedang dimuat di pipa aset. require di application.js . Anda file (jika Anda belum memanggil require tree . ).

Aktifkan Permintaan Paralel:

Di lingkungan pengembangan, Anda harus mengaktifkan permintaan paralel dengan menambahkan dua baris ini ke config/environments/development.rb Anda :

config.preload_frameworks = true
config.allow_concurrency = true

Sekarang jalankan browser Anda, ramban ke /chat dan lihat keajaibannya. Saat Anda mengetik pesan dan mengklik tombol, pesan akan diterima oleh semua instance halaman web tersebut.

Nah ini dia cara membuat aplikasi chat dasar di rails menggunakan ActionController::Live dan Redis . Kode akhir jelas akan sangat berbeda tergantung pada kebutuhan Anda, tetapi ini akan membantu Anda memulai.

Beberapa sumber daya lainnya yang harus Anda periksa:

  • Pembuatan Cinta yang Lembut - Apakah Ini Langsung?
  • Railscasts - #401 - ActionController::Live
  • SitePoint - Obrolan Mini dengan Rails dan SSE
  • Github - mohanraj-ramanujam / streaming langsung
  • Thoughtbot - Contoh Obrolan menggunakan SSE



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menyalurkan di node.js ke redis?

  2. Jika pekerja seledri mati, apakah pekerjaan akan dicoba lagi?

  3. Dapatkan kunci dan nilai Redis di command prompt

  4. Cara membatalkan bagian hierarki (pohon) data dalam cache Redis

  5. Menginstal Redis di CentOS 7