Websockets

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

require ‘config/environment’

Ale wiesz, że będziesz musiał mieć asynchroniczny adapter do bazy pod spodem ?

Uff, udało mi się dopasować gem’y i uruchomić

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:

[code]require ‘…/…/config/environment’
@wss = []
EventMachine::WebSocket.start(:host => “0.0.0.0”, :port => 8080) do |ws|

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ąć :cool:

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).

http://peepcode.com/products/eventmachine - 12$ to nie jest zaporowa cena myślę.