실시간 푸시 알림을 위해 Juggernaut 2와 함께 레일 앱을 작성 중이며이 문제를 해결하는 방법을 모르겠습니다. 채팅방에 여러 명의 사용자가 있으며 30 초마다 채팅방의 각 브라우저로 푸시를 나가기 위해 타이머를 실행하고 싶습니다. Juggernaut 2는 node.js를 기반으로하므로이 코드를 작성해야한다고 가정합니다. 난 그냥 여기서 당신은에 관심이있을 수 저거넛 2.Juggernaut가 설치된 서버 측 타이머 2
답변
난 그냥 간단하게 그렇게 에누리 내 대답을 저거넛을 통해 찾아 ...
- 를이 통합의 관점에서 시작하는 아무 생각이 없다 Channel 객체 (https://github.com/maccman/juggernaut/blob/master/lib/juggernaut/channel.js) Channel.channel은 존재하는 모든 채널의 객체입니다 (루비의 해시를 생각해보십시오). . 30 초주기 타이머 (setInterval - http://nodejs.org/docs/v0.4.2/api/timers.html#setInterval)를 설정하여 모든 채널에서 작업을 수행 할 수 있습니다.
각 루프 반복에서 수행 할 작업은 무엇입니까?
publish: function(message){ var channels = message.getChannels(); delete message.channels; for(var i=0, len = channels.length; i < len; i++) { message.channel = channels[i]; var clients = this.find(channels[i]).clients; for(var x=0, len2 = clients.length; x < len2; x++) { clients[x].write(message); } }
}
그래서 당신은 기본적으로 Channel.channels로하고있는 경우 설정 message.channels와 메시지 객체를 생성해야한다 : 글쎄, 상기 채널 코드에 대한 링크가 게시 방법이있다 해당 메시지를 게시 방법에 전달하면 모든 고객에게 발송됩니다.
메시지의 내용과 관련하여 클라이언트 측 (socket.io - 채팅 클라이언트 인 Juggernaut 및 socket.io에서 이미 빌드 한 사용자)을 사용하고 싶지 않습니다.
간격을 만드는 코드를 넣는 위치와 모든 채널에 메시지를 게시하기 위해 콜백을 시작하는 위치에 대해서는 지정된 포트에서 수신하는 실제 서버를 만드는 코드를 여기에서 확인하십시오. (https : //github.com/maccman/juggernaut/blob/master/lib/juggernaut/server.js) init() 내에 간격을 첨부하면 서버를 시작하자마자 30 초마다 점검하여 모든 채널에 주어진 메시지
다음은 Ruby에서 30 초마다 푸시하는 샘플 클라이언트입니다. 다음, 루비와 루비 젬을 설치 우리는 가변 시간 간격에 질문을 밀어 퀴즈 시스템을 구현 gem install juggernaut
및
#!/usr/bin/env ruby
require "rubygems"
require "juggernaut"
while 1==1
Juggernaut.publish("channel1","some Message")
sleep 30
end
실행
은 레디 스 및 노드와 저거 너트를 설치합니다. 우리의 경우 핵심은 우리가 아직 들어오는 점수를 처리 할 수 있도록 퀴즈 타이밍 백그라운드 프로세스를 실행하는 '스폰'를 사용했다
def start_quiz
Rails.logger.info("*** Quiz starting at #{Time.now}")
$redis.flushall # Clear all scores from database
quiz = Quiz.find(params[:quizz] || 1)
@quiz_master = quiz.user
quiz_questions = quiz.quiz_questions.order("question_no ASC")
spawn_block do
quiz_questions.each { |q|
Rails.logger.info("*** Publishing question #{q.question_no}.")
time_alloc = q.question_time
Juggernaut.publish(select_channel("/quiz_stream"), {:q_num => q.num, :q_txt => q.text :time=> time_alloc})
sleep(time_alloc)
scoreboard = publish_scoreboard
Juggernaut.publish(select_channel("/scoreboard"), {:scoreboard => scoreboard})
}
end
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
end
다음과 같이 우리는 그것을했다.
나는 이것이 얼마나 확장 성이 있는지 알지 못합니다.
https://github.com/maccman/juggernaut에서 시작 위치를 설명하지 않습니까? –
네, Juggernaut가 일하고 있으며 채팅 앱이 있습니다. node.js에 서버 사이드 타이머를 추가하고 Juggernaut와 통합하려고합니다. – TenJack