पूर्व अनुरोध:
- रूबी 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 - एक्शनकंट्रोलर::लाइव
- साइटपॉइंट - रेल और एसएसई के साथ मिनी चैट
- गीथूब - मोहनराज-रामानुजम / लाइव-स्ट्रीम
- थॉटबॉट - एसएसई का उपयोग करके चैट उदाहरण