ruby – EventMachine和em-websocket – 从队列中读取并推送到频道

ruby – EventMachine和em-websocket – 从队列中读取并推送到频道,第1张

概述我正在使用eventmachine从HornetQ主题中读取,推送到由EM websocket连接订阅的Channel.我需要阻止@ topic.receive循环阻塞,所以创建了一个proc并且调用EventMachine.defer而没有回调.这将无限期地运行.这很好用.我也可以使用Thread.new. 我的问题是,这是从流/队列中读取并将数据传递到通道的正确方法吗?有更好的/任何其他方法来 我正在使用eventmachine从hornetq主题中读取,推送到由EM websocket连接订阅的Channel.我需要阻止@ topic.receive循环阻塞,所以创建了一个proc并且调用EventMachine.defer而没有回调.这将无限期地运行.这很好用.我也可以使用Thread.new.

我的问题是,这是从流/队列中读取并将数据传递到通道的正确方法吗?有更好的/任何其他方法来做到这一点吗?

require 'em-websocket'require 'torqueBox-messaging'class WebsocketServer  def initialize    @channel = EM::Channel.new    @topic = TorqueBox::Messaging::topic.new('/topics/mytopic')  end   def start    EventMachine.run do      topic_to_channel = proc do        while true          msg = @topic.receive          @channel.push msg        end      end      EventMachine.defer(topic_to_channel)      EventMachine::WebSocket.start(:host => "127.0.0.1",:port => 8081,:deBUG => false) do |connection|        connection.onopen do          sID = @channel.subscribe { |msg| connection.send msg }          connection.onclose do                        @channel.unsubscribe(sID)          end        end      end                      end  endendWebsocketServer.new.start
解决方法 这没关系,但是EM.defer会产生20个线程,所以我会为你的用例避免它.一般来说,我会完全避免EM,特别是Java反应堆,因为我们从未完成它.

TorqueBox有一个原生的stockets over websockets解决方案,这将是一个更好的方式在这个上下文,并解决了一堆其他封装挑战.

如果你真的想坚持使用EM,那么我会使用Thread.new而不是延迟,以避免19个空闲线程无缘无故地占用额外的RAM.

总结

以上是内存溢出为你收集整理的ruby – EventMachine和em-websocket – 从队列中读取并推送到频道全部内容,希望文章能够帮你解决ruby – EventMachine和em-websocket – 从队列中读取并推送到频道所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1268462.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存