Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Ruby的音频流中继_Ruby - Fatal编程技术网

基于Ruby的音频流中继

基于Ruby的音频流中继,ruby,Ruby,我试图开发一个音频流中继使用 像身份验证和日志记录这样的工作效果很好。问题是,每个新的传入连接都会导致到音频流的新连接 我的部分代码: require 'em-proxy' host = "0.0.0.0" port = 9889 puts "listening on #{host}:#{port}..." Proxy.start(:host => host, :port => port) do |conn| conn.server :srv, host: "127.0.0

我试图开发一个音频流中继使用

像身份验证和日志记录这样的工作效果很好。问题是,每个新的传入连接都会导致到音频流的新连接

我的部分代码:

require 'em-proxy'

host = "0.0.0.0"
port = 9889
puts "listening on #{host}:#{port}..."

Proxy.start(:host => host, :port => port) do |conn|

  conn.server :srv, host: "127.0.0.1", port: 8000

  conn.on_data do |data|
    # logging happens here
    data
  end

  conn.on_finish do |backend, name|
    # logging too
    unbind
  end

end
理想情况下,我希望只有一个连接到音频流


有什么想法吗?

我不熟悉
em proxy
,但一年前我确实在EventMachine上做了一个项目

您要做的是在启动代理进程时连接到音频流。除此之外,您还将维护一个客户池。每次从音频流接收数据时,您都将在客户端池中迭代并中继接收到的数据

以下是EventMachine模板:

module MyRadioClient
  def post_init
    some_client_list.add(self)
  end

  def receive_data data
    # do nothing        
  end

  def unbind
    some_client_list.remove(self)
  end
end
您将使用以下命令启动模块:

EventMachine.run {
  EventMachine.start_server "0.0.0.0", 4567, MyRadioClient
}
现在人们可以通过端口4567连接,而你将忽略他们发送的任何内容

接下来,您需要连接到您的音频流,该音频流在接收到数据后将中继到您的无线电客户端


您可以在本文档的第20页上看到一个示例:

您能展示一些代码吗?问题还不清楚。哦,对不起@Guillermebernal。只是粘贴了一些代码。感谢您的关注。您正在尝试复制8000端口的传出数据?我没有em proxy的实际经验,但它看起来是为中继连接而定制的,而不是单向数据流。TCP是双向的,所以每次客户端连接到代理服务器时,em代理服务器都应该创建到源服务器的新连接,这很有意义。这似乎就做到了!谢谢你@NielsB。谢谢你的回答。