我希望在服务器启动时在我的rails应用程序中订阅mqtt主题,并保持订阅始终处于活动状态并正在运行.
我正在使用这个mqtt gem进行mqtt通信:https: //github.com/njh/ruby-mqtt
这就是我现在所拥有的:
在application.rb中:
config.after_initialize do
mqttSub = BackgroundMQTT.new
mqttSub.run
end
Run Code Online (Sandbox Code Playgroud)
BackgroundMQTT类:
class MQTTSubscriber
def run
Thread.new do
MQTT::Client.connect(:host => 'localhost', :port => 1883,) do |c|
c.get('#') do |topic,message|
puts "#{topic}: #{message}"
#Do things, access activerecord etc.
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
所以基本上mqtt订阅从after_initialize方法开始,据我所知,不会自动停止?
另外如您所见,我正在线程中运行订阅,否则我的rails应用程序将停止执行除听取mqtt订阅之外的任何其他操作.
这似乎至少在前几分钟有效.
我不确定这是否是我想做的事情的推荐方式.这会导致我没有考虑过的任何问题吗?这样做的推荐方法是什么?
如何通过Java类对Activity进行回调?
例:
public class TestClass{
String text = "Test";
public TestClass(Context context){
startActivity(new Intent(context, SomeActivity.class));
}
private void sendToSomeActivity(){
//Call some method of SomeActivity and pas text as string
}
}
Run Code Online (Sandbox Code Playgroud)
当sendToSomeActivity()被调用时,我想对已经开始的回调SomeActivity,并将一些文本传递给Activity。在SomeActivity我想用文字。
注意:我要使用的TestClass对象已经在另一个类中创建。
如何才能做到这一点?