我是Node.js和Socket.io的真正新手 - 所以如果这是一个愚蠢的问题,请耐心等待。
我在Heroku上设置了一个非常基本的假人来测试Socket.io。您所能做的就是单击一个按钮,所有连接的浏览器都会相应地看到一条消息。当服务器在本地运行时,这非常有效。现在它在Heroku上我看到Safari和Chrome上的连接问题。初始连接延迟大约10秒,第一次调用io.connect('http://myapp.heroku.com/')
时出现错误503。
在Firefox和Internet Explorer中,几乎可以立即实现连接。
您可以在此处查看应用: http://sprain.ch/socketio/
有关可能导致此问题的原因以及如何解决问题的任何想法?
答案 0 :(得分:8)
您可以使用“connect timeout”参数(默认为10秒)减少第一个websocket连接使用的超时。
您可以尝试使用以下方法将超时时间减少到1秒
io.connect('http://myapp.heroku.com/',{'connect timeout': 1000});
答案 1 :(得分:4)
这是因为它们不支持websockets。因此socket.io在尝试使用websocket之前超时尝试使用XHR轮询,这是不一样的,但可能适合您的目的(?)。正如Aashay帖子中的链接所示,将此代码添加到server.js或app.js文件中:
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
但这与实际使用websockets不是一回事......例如,在OpenShift.com上,您现在可以通过端口8000连接到您的应用程序,然后它实际上使用websockets,而由于Apache的问题,默认端口恼人地不支持它。
答案 2 :(得分:3)
一些事情:
我建议您使用以下设置:http://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku
只需尝试“io.connect()”,而不是尝试手动指定URL。无论主机是什么,SocketIO都有一些非常可靠的内置发现机制来与localhost通信。
关于Heroku + Socket.IO(从经验来讲)并没有什么本质上的慢,所以它让我相信你的代码中还有其他东西在发生。如果你可以分享更多,可能更容易诊断。
另外FWIW你链接的页面只有一些文字说“klick me!”没有按钮。