我在 sinatra 应用程序中有一个 websocket-rack 的工作配置,该应用程序旨在用于具有多个屏幕的物理安装。有一些功能可以通过 websocket 来回传递消息。
我的问题是:我有一个带有标准 web 表单(即不是 websocket 表单)的页面,我的目标是从该表单收集参数,将参数转换为字符串变量,然后发送该变量的内容(一个字符串)通过 websocket 到不同的页面/屏幕。对于我的生活,我无法弄清楚如何做应该是一个相对简单的任务,因为从我的应用程序的主类中,我无法与我的 Socket 类进行通信,据我所知,这基本上是一个机架应用程序。
我试图通过将 resque 设置为中间人来解决它,但很快发现我的问题并没有改变。我不知道如何调用方法和/或将变量从另一个类传递给 Socket,以便它将推送到浏览器。
基本上,我有一个 app.rb 是这样的:
    module SomeThing
      class App < Sinatra::Base
        get '/' do
          #show a form
        end
        post '/submit' do
          #receive params
          #save params
          new_message = params.inspect
          #dream up some way to pass new_message to websocket
        end
        post '/otherscreen' do
          #have an open websocket to receive new_message
        end
      end
      class Socket < Rack::WebSocket::Application
        def on_open(env)
          puts "Client connected"
          send_data "Oh hai!"
        end
        def on_close(env)
          puts "Client disconnected"
        end
        def on_message(env, msg)
           puts "Received message from client: " + msg
        end
        def on_error(env, error)
          puts "An error occured: " + error.message
        end
        def pass_message(env, new_message)
          send_data new_message
        end
      end   
    end
如果您需要更多信息来解决此问题,请告诉我。我很乐意提供任何需要的东西,只是不确定现在可能是什么。
你知道我该如何解决这个问题吗?这太痛苦了。
提前谢谢!