socket.io不适用于heroku

时间:2014-10-13 18:26:21

标签: node.js heroku socket.io

我是socket.io和heroku的新手。我写了一个简单的聊天系统但是当我在Heroku上发布它时它不起作用。 app.js

var port = process.env.PORT || 3000;

var io   = require('socket.io')(port);
// var url  = require('url');


io.on('connection', function(socket,d) {
    socket.on('sendMsg', function(data) {
        console.log('SEND msg');
        console.log(data);
        io.emit('getMsg',data);
    });

    console.log(socket.handshake.query.id);
});

并在客户端:

 <script src="http://chatserversm.herokuapp.com:3000/socket.io/socket.io.js"></script>
        <script>
            var socket = io('http://chatserversm.herokuapp.com:3000?id=2');
            ....

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您的客户端尝试连接到端口3000,但在Heroku process.env.PORT上设置为80。

Heroku只暴露端口80(和SSL的443),因此您必须更改客户端才能连接到该端口。

请注意,它应该可以在同一端口上与HTTP服务器一起使用。

编辑:这是你应该做的。

首先,您需要您的客户端连接到正确的端口:

var socket = io('http://chatserversm.herokuapp.com:80?id=2');

由于已经暗示了端口80,您也可以将其写为:

var socket = io('http://chatserversm.herokuapp.com?id=2');

另一个类似问题是您尝试从端口3000获取socket.io.js,因此您还需要更改为:

<script src="http://chatserversm.herokuapp.com/socket.io/socket.io.js"></script>