我一直在玩 Cramp,在应用程序中实时推送信息。它在本地运行良好,但是当我推到 heroku 时,我似乎遇到了端口问题。
我在 cramp 中设置了一个套接字,它继承自 websocket
class LiveSocket < Cramp::Websocket
而且我还有一个名为 home 的抽筋动作,它基本上只是为主页呈现一些 erb
class HomeAction < Cramp::Action
在我的路由文件中,我设置了以下内容以及静态文件服务器
Rack::Builder.new do
puts "public file at #{File.join(File.dirname(__FILE__), '../public')}"
file_server = Rack::File.new(File.join(File.dirname(__FILE__), 'public'))
routes = HttpRouter.new do
add('/').to(HomeAction)
get('/LiveSocket').to(LiveSocket)
end
run Rack::Cascade.new([file_server, routes])
end
然后在客户端,javascript连接到
var ws = new WebSocket("ws://<%= request.host_with_port %>/LiveSocket");
正如我在当地所说,这一切都有效。我们连接并开始接收来自服务器的通知。在 heroku 上,我们在 Cedar 堆栈上运行得很薄,并且配置文件看起来像
web: bundle exec thin --timeout 0 start -p $PORT
当我加载网站时,页面本身加载正常,但在尝试连接 websocket 时出现错误,提示
servername.herokuapp.com Unexpected response code: 200
我猜这与 heroku 如何路由它的请求有关,但我知道你可以在 heroku 上运行 node.js websocket 服务器,所以我认为必须有一种方法可以让它工作。
提前感谢您的帮助。
干杯
斯图尔特