Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在网页上显示更新哈希_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在网页上显示更新哈希

Ruby on rails 在网页上显示更新哈希,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个IRC机器人,它根据某个命令更新哈希键值。这些值是“自由”或“获取”。调用labstatus时,它将显示4个键值对的输出{:MainSP4=>“Free”、:MainSP5=>“Free”、:MiniSP4=>“Free”、:MiniSP5=>“Free”}。我想在网页上连续显示实验室状态的输出,并希望在命令传递到IRC bot时更新。我尝试过创建一个全局变量并调用它,但没有成功,尽管这可能只是用户的错误 IRC bot 查看 我决定走websockets路线。我已经安装了使用ra

我有一个IRC机器人,它根据某个命令更新哈希键值。这些值是“自由”或“获取”。调用
labstatus
时,它将显示4个键值对的输出
{:MainSP4=>“Free”、:MainSP5=>“Free”、:MiniSP4=>“Free”、:MiniSP5=>“Free”}
。我想在网页上连续显示
实验室状态的输出
,并希望在命令传递到IRC bot时更新。我尝试过创建一个全局变量并调用它,但没有成功,尽管这可能只是用户的错误

IRC bot

查看



  • 我决定走websockets路线。我已经安装了使用rails应用程序实现WebSocket的所有要求。现在我被卡住了,因为我不知道如何设置我的websocketcontroller.rb、events.rb。我已经阅读了github wiki页面上的设置,但仍然不清楚。非常感谢您提供的任何示例或帮助。

    为了在没有任何用户交互的情况下更新网页内容,您有三种可能:

  • 从客户机到服务器的持续轮询(带宽高,使用率高,易于通过jquery实现,将开箱即用)
  • WebSocket(取决于您的web服务器功能)
  • 服务器发送事件(从未尝试过,但听起来也很有希望)
  • Ilya Bodrov Krukowski在sitepoint上发布了一系列关于此的帖子

    (持续轮询)

    (WebSocket)

    (续)


    希望您能找到最适合您的解决方案。

    HTTP不是这样工作的。一旦从服务器请求一个网页,它就会呈现该网页,将其发送到客户端并关闭连接。在发出另一个请求之前,客户端和服务器之间没有进一步的通信。为了在客户端页面上进行实时更新,有几个选项可用,所有这些选项都使用JavaScript在客户端和服务器之间进行异步通信:

    最容易实现的选项是AJAX轮询。客户端反复连接回服务器,通过JavaScript检查当前值。通常,一个单独的HTTP端点以JSON格式提供数据,使其可供客户端使用。当值发生更改时,JavaScript会相应地更新DOM,用户会看到新值。这种方法的缺点是,客户机将发送大量不必要的请求,即使值实际上没有改变。在最坏的情况下,您还有一个与更新间隔一样长的延迟

    使用web套接字,客户端和服务器之间的独立连接保持打开状态,数据可以在两者之间来回发送。使用这种方法,您可能会受益于更少的开销、更快的更新(无需等待下一个更新间隔),并且除非值实际发生更改,否则不会有任何通信。然而,这需要更多的努力来实现。类似的解决方案可以使用长轮询或持久HTTP连接来实现

    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 %>