Witam, potrzebuję napisać aplikacje wykorzystującą websockety z html5.
Problem pojawia się, gdyż nie bardzo wiem gdzie umieścić plik ‘server.rb’ z przykładowym tutorialowym kodem:
require 'em-websocket'
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { ws.send "Hello Client!"}
ws.onmessage { |msg| ws.send "Pong: #{msg}" }
ws.onclose { puts "WebSocket closed" }
end
Kod ten nie musi uruchamiać się razem z serwerem (‘ rails s ’),mogę to robić ‘ręcznie’,
ale powinien mieć dostęp do wszystkich klas/modeli z bazy danych, więc powinien być integralną częścią railsowej aplikacji.
Na helper’a to się raczej nie kwalifikuje, a tym bardziej na controller dlatego jestem chwilowo w kropce.
Prosiłbym o podsuniecie jakiegoś pomysłu
Niebardzo rozumiem czemu ma to być asynchroniczne, przecież nie ma na co czekać.
Serwer odbiera komunikat => robi update rekordu.
Żeby nie być gołosłownym poniższy przykład działa:
ws.onopen { @wss << ws
ws.send “jestes numerem #{@wss.count}”
}
ws.onmessage do |msg|
Building.find(62).update_attribute(:x,666) # zmienia współrzędną X na 666 … @wss.each do |w|
w.send “Pong: #{msg}”
end
end
ws.onclose { puts “WebSocket closed” }
end[/code]
Dzięki za odpowiedz Tomash to było to czego mi trzeba.
Dodam jeszcze że powyższy przykład jest bez sensu, ale demonstruje wszystko co chciałbym osiągnąć
Niebardzo rozumiem czemu ma to być asynchroniczne, przecież nie ma na co czekać.
Serwer odbiera komunikat => robi update rekordu.[/quote]
Przy małym obciążeniu nie ma to większego znaczenia, ale przy większym może być problem. Poczytaj więcej o “reactor pattern”. W skrócie chodzi o to, że używając EventMachine pod spodem masz event loop, a wszystko działa na jednym wątku, więc wszystko to co tam uruchamiasz nie może blokować IO (inaczej jesteś ograniczony do jednego połączenia w tym samym czasie).