Я один рубин на применении рельсов, в которых я определил один инициализатор для 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?
Любые советы или помощь будут оценены.
Заранее спасибо.
Спасибо за ответ @Lukas Eklund. Можете ли вы предложить какой-либо другой подход для достижения такого же поведения на героку? Я использую сервер единорога в heroku. –