2015-05-26 2 views
0

У меня есть бот IRC, который обновляет значение хэш-ключа по определенной команде. Значения являются либо «свободными», либо «взятыми». Когда вызывается lab status, он отображает вывод четырех пар значений ключа {:MainSP4=>"Free", :MainSP5=>"Free", :MiniSP4=>"Free", :MiniSP5=>"Free"}. Я хочу постоянно отображать вывод lab status на веб-странице и хотел бы, чтобы он обновлялся по мере передачи команд IRC-боту. Я пробовал делать глобальную переменную и вызывать ее, но не работал, хотя, возможно, это была ошибка пользователя.отображение хэша обновления дисплея на веб-странице

IRC бот

require 'cinch' 
require 'chronic' 
require 'sqlite3' 
require 'sequel' 
require 'cinch/commands' 

Lab = 
{MainSP4: "Free", 
MainSP5: "Free", 
MiniSP4: "Free", 
MiniSP5: "Free"} 

LabC = 
{MainSP4: " ", 
MainSP5: " ", 
MiniSP4: " ", 
MiniSP5: " "} 

############### DB Connection ##################### 
class Database 
    include Cinch::Plugin 

    match /select .* from gears where .* like .*/i 

    def execute(m) 
    db = SQLite3::Database.open("development.sqlite3") 
    m.reply db.execute("#{m.message}") 
end 
end 

############## Lab status and Commands #################### 
class Racks 
    include Cinch::Plugin 

    match /lab status/i 
    def execute(l) 
    l.reply "#{Lab}" 
    end 
end 

Посмотреть

<% $Lab.each do |key, value| %> 
    <li><%= "#{key}: #{value}" %> 
<% end %> 

Я решил пойти по пути WebSockets. Я установил все требования для создания веб-узлов с помощью моего приложения rails. Теперь я застрял, так как не уверен, как настроить мой websocketcontroller.rb, events.rb. Я прочитал настройку на странице wiki github, но все еще неясно. Любые примеры или помощь по этому вопросу будут очень признательны.

ответ

1

Чтобы обновить содержимое веб-страницы без какого-либо взаимодействия с пользователем, у вас есть три возможности:

  1. Постоянный опрос от вашего клиента к серверу (использование высокой пропускной способностью, легко реализовать с помощью JQuery, будет работать из коробки)
  2. WebSockets (зависит от ваших возможностей веб-сервера)
  3. сервера Sent Events (никогда не пробовал это, но это звучит многообещающе, а)

У Илья Бодрова-Круковского есть серия сообщений об этом на сайте.

http://www.sitepoint.com/mini-chat-rails/ (постоянный опрос)

http://www.sitepoint.com/realtime-mini-chat-rails-faye/ (WebSockets)

http://www.sitepoint.com/mini-chat-rails-server-sent-events/ (МП)

Надеется, что вы найдете решение, которое подходит вам лучше всего.

1

Не работает HTTP. Как только веб-страница запрашивается с сервера, она отображает ее, отправляет ее клиенту и закрывает соединение. Связь между клиентом и сервером отсутствует, пока не будет сделан другой запрос. Для создания живых обновлений на клиентской странице доступно несколько вариантов, все из которых используют JavaScript для асинхронной связи между клиентом и сервером:

Самый простой вариант для реализации - опрос AJAX. Клиент повторно подключается к серверу для проверки текущего значения с помощью JavaScript. Обычно отдельная конечная точка HTTP предоставляет данные в формате JSON, чтобы сделать ее доступной для клиента. Когда значение изменилось, JavaScript обновляет DOM соответственно, и пользователь видит новое значение. Этот подход имеет недостаток, что клиенты будут отправлять много ненужных запросов, даже если значения фактически не изменяются. У вас также есть латентность, которая до тех пор, пока интервал обновления в худшем случае.

С веб-сокетами между клиентом и сервером поддерживается отдельное соединение, и данные могут быть отправлены туда и обратно между ними.При таком подходе вы, вероятно, выиграете от меньших накладных расходов, более быстрых обновлений (не нужно ждать следующего интервала обновления), и не будет никакой связи, если фактические значения не будут изменены. Однако для этого требуется больше усилий. Подобные решения могут быть реализованы с использованием длинных опросов или постоянных HTTP-соединений.

Смежные вопросы