Rol*_*and 8 ruby io multithreading m2m
我正在构建一个小的ruby程序来运行与MQTT服务器的连接并订阅一个通道.我正在使用mosquitto gem,它只是libmosquitto C库的桥梁.
我创建了一个非常简单的程序实现,可以运行ruby my_prog.rb:
# Dependencies
require File.expand_path(File.join('..', 'environment'), __FILE__)
# MQTT Application
module Pulsr
class MQTT
attr_reader :host, :port, :alive
def initialize(host = 'iot.eclipse.org', port = 1883, alive = 60)
@client ||= Mosquitto::Client.new SecureRandom.hex(8)
Signal.trap(Signal.list.has_key?('INT') ? 'SIGINT' : 'SIGTERM') do
@client.log 'Shutdown'
shutdown
end
@host = host
@port = port
@alive = alive
start
end
private
def on_connect
Proc.new { |return_code|
@client.log "Connected RC #{return_code}"
@client.subscribe(nil, '/pulsr', Mosquitto::EXACTLY_ONCE)
}
end
def on_disconnect
Proc.new { |return_code| @client.log "Disconnected RC #{return_code}" }
end
def on_subscribe
Proc.new { |message_id, granted_qos| @client.log "Subscribed MID #{message_id} QoS #{granted_qos}" }
end
def on_unsubscribe
Proc.new { |message_id| @client.log "Unsubscribed MID #{message_id}" }
end
def on_message
Proc.new { |message| Pulsr::Workers::TrackingEvent.perform_async message.to_s }
end
def configure
@client.logger = Logger.new(STDOUT)
@client.on_connect &on_connect
@client.on_disconnect &on_disconnect
@client.on_subscribe &on_subscribe
@client.on_unsubscribe &on_unsubscribe
@client.on_message &on_message
end
def connect
@client.connect_async(@host, @port, @alive)
end
def start
@client.loop_start
configure
connect
sleep
end
def shutdown
@client.loop_stop(true)
Process.exit
end
end
end
# MQTT Start
Pulsr::MQTT.new :host => 'iot.eclipse.org', :port => 1883, :alive => 60
Run Code Online (Sandbox Code Playgroud)
我想知道,如果我想使用Celluloid或EventMachine运行mosquitto gem提供的循环,我该怎么做?
mosquitto gem提供了一个很好的文档,并提供了一些可以使用的循环方法,但我不知道从哪里开始或如何做,我既没有使用EM或赛璐珞.
任何人都可以帮助开始这个,我认为它可以为社区带来一些价值,它最终可以作为一个开源项目,蚊子宝石的一小部分?
gem为em-mqtteventmachine提供了 MQTT 协议实现。
这使用纯 rubymqtt 实现来处理消息而不是libmosquitto.
如果您确实必须使用通过gemlibmosquitto进行解析的实现,那么上面的描述将成立。该组件将几乎保持原样。所有对协议特定模块的调用都将被替换为. 主要问题似乎是公共 API和后续的Ruby API将所有这些隐藏在自己的网络实现中,该实现正在被替换,因此您需要进行大量的黑客攻击才能将所需的方法公开给 Ruby你可以开始了。mosquittoeventmachineMQTTlibmosquittolibmosquittolibmosquittoeventmachine
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |