我试过的每个端口上的Heroku上的Socket.io 404es

时间:2013-01-15 13:13:08

标签: heroku socket.io

我运行了应用程序,它找不到socket.io并给我404.

这是客户:

<script src="http://game-test-1.herokuapp.com/socket.io/socket.io.js"></script>
<script>var socket = io.connect('http://game-test-1.herokuapp.com');</script>

这是服务器:

 var express = require('express'),
    routes = require('./routes'),
    user = require('./routes/user'),
    http = require('http'),
    path = require('path'),
    express = require("express"),
    app = express(),
    server = http.createServer(app),
    io = require('socket.io').listen(server);

server.listen(80);

我尝试更改端口并执行http://game-test-1.herokuapp.com:81/...,但这给了我一个错误

如何正确链接socket.io?

3 个答案:

答案 0 :(得分:1)

Heroku要求您的应用程序侦听Heroku选择的端口。 Heroku将通过PORT环境变量在启动应用程序时告诉您的应用程序此端口。如果您在任何其他端口上侦听,Heroku将忽略它并在60秒后终止您的应用程序。

您的用户的浏览器仍将使用端口80进行HTTP流量,将443用于HTTPS流量。 Heroku的路由层位于用户浏览器和应用程序之间,它将HTTP流量通过Heroku为您的应用程序指定的端口发送到您的应用程序。

答案 1 :(得分:0)

Heroku开发中心有一个guide on using socket.io on Heroku。特别是,你需要这一点配置:

// assuming io is the Socket.IO server object
io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

答案 2 :(得分:-1)

这是因为Heroku目前不支持Websockets(据我所知)为了使用socket.io,你需要强制它回退到xhr长轮询方法。