2

我一直在玩 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 服务器,所以我认为必须有一种方法可以让它工作。

提前感谢您的帮助。

干杯

斯图尔特

4

1 回答 1

0

我不认为 Heroku 支持 websockets :( http://devcenter.heroku.com/articles/http-routing#the_herokuappcom_http_stack

于 2011-09-13T16:52:32.383 回答