gpt4 book ai didi

ruby - EventMachine 模块的实例变量

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

我正在编写一个应用程序,它使用 EventMachine 来中继来自服务的命令。我想重新使用与服务的连接(而不是为每个新请求重新创建它)。该服务从模块方法启动,并且该模块提供给 EventMachine。如何存储连接以便在事件机器方法中重复使用?

我有什么(简化):

require 'ruby-mpd'
module RB3Jay
def self.start
@mpd = MPD.new
@mpd.connect
EventMachine.run{ EventMachine.start_server '127.0.0.1', 7331, self }
end
def receive_data
# I need to access @mpd here
end
end

到目前为止我唯一的想法是@@class_variable,但我正在考虑这样的 hack 的唯一原因是我不习惯 EventMachine 并且不知道更好的模式.我如何重构我的代码以使 @mpd 实例在请求期间可用?

最佳答案

不使用模块方法,你可以继承EM::Connection并通过EventMachine.start_server传递mpd,这将传递它到类的 initialize 方法。

require 'ruby-mpd'
require 'eventmachine'

class RB3Jay < EM::Connection
def initialize(mpd)
@mpd = mpd
end

def receive_data
# do stuff with @mpd
end

def self.start
mpd = MPD.new
mpd.connect

EventMachine.run do
EventMachine.start_server("127.0.0.1", 7331, RB3Jay, mpd)
end
end
end

RB3Jay.start

关于ruby - EventMachine 模块的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887113/

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