gpt4 book ai didi

ruby - 如何将数据从我的 sinatra 应用程序中的类传递到 websocket-rack?

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:41 25 4
gpt4 key购买 nike

我在 sinatra 应用程序中获得了 websocket-rack 的工作配置,该应用程序旨在用于具有多个屏幕的物理安装。有一些功能可以正常工作,消息可以通过 websocket 来回传递。

我的问题是:我有一个带有标准网络表单的页面(即不是 websocket 表单),我的目标是从该表单收集参数,将参数转换为字符串变量,然后发送内容该变量(一个字符串)通过 websocket 到不同的页面/屏幕。对于我的生活,我无法弄清楚该怎么做应该是一项相对简单的任务,因为从我应用程序的主类中,我无法与我的 Socket 类进行通信,据我了解,这基本上是一个 Rack 应用。

我尝试通过将 resque 设置为中间人来解决它,但很快发现我的问题并没有改变。我不知道如何从另一个类调用方法和/或将变量传递给套接字,以便它将推送到浏览器。

基本上,我有一个像这样的 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

如果您需要更多信息来解决此问题,请告诉我。我很乐意提供所需的一切,只是不确定现在可能是什么。

你知道我该如何解决这个问题吗?我快要死了。

提前致谢!

最佳答案

所以,我写信给 websocket-rack 的作者 Bernard Potocki,他是这样说的:

“我通常做的是将事件连接列表保存到某种类变量中。其中一种可能的实现可能类似于此要点:https://gist.github.com/imanel/a00d6b65561ebba43b9a

要点的内容,以防它被删除:

class Socket < Rack::WebSocket::Application

def self.connections
@connections ||= []
end

def self.send_to_all(message)
@connections.each {|connection| connection.send_data(message)
end

def on_open(env)
self.class.connections << self
end

def on_close(env)
self.class.connection.delete(self)
end

end

然而,最终我没有测试这个解决方案,因为我们能够使用 Redis 和 Event Machine 解决这个问题,所以请注意这也是一个选项。

关于ruby - 如何将数据从我的 sinatra 应用程序中的类传递到 websocket-rack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com