我有一个简单的socket.io聊天应用程序,我上传到其中一个新的Heroku 'cedar'堆栈。
现在我几乎把一切都搞定了,但我遇到了一个绊脚石。在我的localhost上,我使用以下命令打开与客户端的套接字服务器的连接:
// lots of HTML omitted
socket = new io.Socket('localhost', {port: 8888});
但是在Heroku上,我显然必须用其他东西代替这些值。
我可以从服务器上的进程对象获取端口,如下所示:
port = process.env.PORT || 8888
并将其传递给视图。
但我该如何替代'localhost'
?
答案 0 :(得分:21)
根据heroku article的正确方法是:
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
socket = new io.Socket();
这可确保io.Socket不会尝试使用WebSockets。
答案 1 :(得分:14)
通过执行以下操作,我能够让Socket.IO v0.8在Heroku Cedar上工作:
在Express应用程序中(在我的案例中为CoffeeScript):
app = express.createServer();
socket = require("socket.io")
...
io = socket.listen(app);
io.configure () ->
io.set("transports", ["xhr-polling"])
io.set("polling duration", 10)
io.sockets.on('connection', (socket) ->
socket.on('myaction', (data) ->
...
socket.emit('result', {myData: data})
### The port setting is needed by Heroku or your app won't start
port = process.env.PORT || 3000;
app.listen(port);
在您的应用程序的前端Javascript中:
var socket = io.connect(window.location.hostname);
function sendSocketRequest() {
socket.emit('myaction', $("#some_field").val());
}
socket.on('result', function(data) {
console.log(data);
}
有用的链接:
答案 2 :(得分:9)
截至2013年10月,这已经发生了变化,heroku已经添加了websocket支持:
https://devcenter.heroku.com/articles/node-websockets
使用:
heroku labs:enable websockets
启用websockets并且不要忘记删除:
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
答案 3 :(得分:6)
在阳光下尝试每一个组合后,我终于把它留空了。瞧,这看起来很完美。你甚至不需要这个端口。
socket = new io.Socket();
答案 4 :(得分:2)
我在heroku上也有这个问题。我能够使用主机名“myapp.herokuapp.com”(或者只是window.location.hostname,在本地和生产中工作)并将端口设置为80来使其工作。我正在使用SocketIO 0.6.0。
答案 5 :(得分:0)
你不会只是把你的实际主机名?
答案 6 :(得分:0)
2011-06-25T21:41:31+00:00 heroku[router]: Error H13 (Connection closed without response) -> GET appxxxx.herokuapp.com/socket.io/1/websocket/4fd434d5caad5028b1af690599f4ca8e dyno=web.1 queue= wait= service= status=503 bytes=
这是否意味着应用程序前面的heroku路由器未配置为处理Web套接字流量?
<强> [更新] 强> 从2011年6月22日开始,答案是肯定的...... heroku不支持socket.io看到这篇文章:http://blog.heroku.com/archives/2011/6/22/the_new_heroku_2_node_js_new_http_routing_capabilities/