2014-11-19 2 views
0

Я один рубин на применении рельсов, в которых я определил один инициализатор для EventMachine, который начнет EventMachine сокет на указанном порту, вот код инициализатора websocket.rb:Могу ли я запустить отдельный порт на герою для EventMachine?

Thread.new { 
    require 'eventmachine' 
    require 'em-websocket' 
    EventMachine.run { 
     host = "0.0.0.0" 
     port = 2000 
     $CHANNEL = EventMachine::Channel.new 
     EventMachine::WebSocket.start(:host => host, :port => port, :debug => true) do |ws| 
     ws.onopen { 
      @sid = $CHANNEL.subscribe { |msg| ws.send msg } 
#   $CHANNEL.push "#{@sid} connected!" 
     } 
     ws.onmessage { |msg| 
       $CHANNEL.push "#{msg}" 
     } 
     ws.onclose { 
       puts "Socket closed." 
#    this code is commented as we don't want to unsubscribe any socket from channel 
#    $CHANNEL.unsubscribe(@sid) 
     } 
     end 
     puts "Socket server started..." 
    } 
} unless EventMachine.reactor_running? && EventMachine.reactor_thread.alive? 

И я ve слушателя для этого сокета в моем html-файле, я использую html WebSocket на моей стороне клиента.

Вот код моей стороны клиента WebSocket слушатель:

if("WebSocket" in window){ 
     var socketURL = 'ws://' + window.location.hostname + ':2000/'; 
      console.log(socketURL); 
      ws = new WebSocket(socketURL); 
     ws.onmessage = function(response) { 
      console.log('Data received:'+response.data); 
     } 
     ws.onclose = function() { 
      console.info('Connection closed'); 
     }; 
     ws.onopen = function() { 
      console.info('Connection opened'); 
     }; 
     }else{ 
      console.log("You browser doesn't support websockets.") 
     } 

Я хочу, чтобы развернуть мои эти рельсы приложения на Heroku, Так есть ли проблема с EventMachine на Heroku?

Можно ли запустить порт на Heroku для TCPServer?

Какие могут быть возможные проблемы, если я развертываю это приложение на Heroku?

Любые советы или помощь будут оценены.

Заранее спасибо.

ответ

0

Нет, невозможно открыть порт на герою для запуска веб-сокета событий, подробно описанного в вашем вопросе. Уровень маршрутизации будет только прокси-порты 80 и 443 до вашего приложения, которое будет прослушивать какой-то произвольный порт, предоставленный героку, когда ваше приложение запустится.

Клиенты не смогут подключиться к сетевой розетке в указанном вами порту. См. Здесь пример использования сетевых розеток с героком: https://devcenter.heroku.com/articles/websockets

+0

Спасибо за ответ @Lukas Eklund. Можете ли вы предложить какой-либо другой подход для достижения такого же поведения на героку? Я использую сервер единорога в heroku. –