Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

एक्शनकंट्रोलर का उपयोग कैसे करें ::रेस्क्यू + रेडिस के साथ लाइव (चैट एप्लिकेशन के लिए)

पूर्व अनुरोध:

  • रूबी 2.0.0+
  • रेल 4.0.0+
  • रेडिस
  • प्यूमा

प्रारंभकर्ता:

एक redis.rb बनाएं config/initializers . में इनिशियलाइज़र फ़ाइल निर्देशिका, redis . के एक उदाहरण का वैश्वीकरण . heartbeat सेट करना भी एक अच्छा विचार है धागा (आपकी आवश्यकताओं के आधार पर 5 सेकंड से 5 मिनट तक कुछ भी ठीक है):

$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

नियंत्रक:

आपको अपने ChatController . में दो तरीके जोड़ने होंगे , pub और sub . pub . की भूमिका चैट ईवेंट और संदेशों को redis . पर प्रकाशित करना है , और sub इन घटनाओं की सदस्यता के लिए। यह कुछ इस तरह दिखना चाहिए:

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

आपके routes . में , पब . बनाएं एक POST और उप एक GET , और पथ का मिलान /chat/publish . जैसी किसी चीज़ से करें और /chat/subscribe .

कॉफ़ीस्क्रिप्ट / जावास्क्रिप्ट:

मान लें कि चैट ऐप के लिए आपका वास्तविक वेबपेज /chat . पर है , आपको कुछ जावास्क्रिप्ट . लिखने की जरूरत है वास्तव में चैट संदेश भेजने और प्राप्त करने के लिए।

समझने में आसानी के लिए, मान लें कि आपके वेबपेज में केवल एक टेक्स्टबॉक्स और एक बटन है। बटन दबाकर टेक्स्टबॉक्स की सामग्री को चैट स्ट्रीम में प्रकाशित करना चाहिए, हम 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

अब, आपको सदस्यता लेने और चैट संदेशों को प्राप्त करने में सक्षम होने की आवश्यकता है। आपको EventSource . का उपयोग करने की आवश्यकता है इसके लिए। इवेंट स्रोत का उपयोग करना , SSE के लिए एक चैनल खोलें ताकि आप ईवेंट प्राप्त कर सकें और उस डेटा का उपयोग दृश्य को अपडेट करने के लिए कर सकें। इस उदाहरण में, हम उन्हें केवल जावास्क्रिप्ट कंसोल में लॉग करेंगे।

कोड कुछ इस तरह दिखना चाहिए:

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

नोट: उपरोक्त दोनों कोड ब्लॉक अपने controllername.coffee . में रखें फ़ाइल, इस उदाहरण के लिए यह होना चाहिए chat.js.coffee आपके app/assets/javascript . में निर्देशिका। आपको यह भी सुनिश्चित करना होगा कि इसे परिसंपत्ति पाइपलाइन में लोड किया जा रहा है। require इसे आपके application.js . में फ़ाइल (यदि आप पहले से कॉल नहीं कर रहे हैं require tree . )।

समानांतर अनुरोध सक्षम करें:

अपने विकास परिवेश में, आपको इन दो पंक्तियों को अपने config/environments/development.rb में जोड़कर समानांतर अनुरोधों को सक्षम करना होगा। :

config.preload_frameworks = true
config.allow_concurrency = true

अब अपने ब्राउज़र को सक्रिय करें, /chat पर ब्राउज़ करें और जादू देखें। जब आप कोई संदेश टाइप करते हैं और बटन पर क्लिक करते हैं, तो उस वेबपेज के सभी उदाहरणों द्वारा संदेश प्राप्त किया जाएगा।

वैसे आप rails . में एक बुनियादी चैट एप्लिकेशन इस प्रकार बनाते हैं ActionController::Live . का उपयोग करके और Redis . आपकी आवश्यकताओं के आधार पर अंतिम कोड स्पष्ट रूप से बहुत अलग होगा लेकिन यह आपको शुरू करना चाहिए।

कुछ और संसाधन जिन्हें आपको देखना चाहिए:

  • निविदा प्रेम बनाना - क्या यह जीवंत है?
  • रेलकास्ट - #401 - एक्शनकंट्रोलर::लाइव
  • साइटपॉइंट - रेल और एसएसई के साथ मिनी चैट
  • गीथूब - मोहनराज-रामानुजम / लाइव-स्ट्रीम
  • थॉटबॉट - एसएसई का उपयोग करके चैट उदाहरण



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस व्यू डेस्कटॉप

  2. एनवी रेडिस यूआरएल वैरिएबल की तलाश में रेडिस सुनिश्चित नहीं है कि एनवी वेरिएबल खराब यूआरआई कहां रखा जाए (यूआरआई नहीं है?):(यूआरआई ::अमान्ययूआरआईइरर)

  3. Redis के साथ विलंबित निष्पादन/शेड्यूलिंग?

  4. अल्पाइन ओएस पर Php7 रेडिस क्लाइंट

  5. क्या हायरडिस रेडिस लाइब्रेरी एसिंक्स कॉलबैक के लिए अपना खुद का थ्रेड बनाती है