在Heroku上使用Node.js的Socket.IO

时间:2013-04-14 02:16:07

标签: node.js heroku socket.io

我使用node.js设置了Socket.IO,它通过侦听/连接到端口8000(或者不是运行我的服务器的端口的其他端口)在我的本地开发机器上工作。

当我尝试在heroku上做同样的事情时,我的客户端脚本导入失败。

我尝试了相对路径

<script src="/socket.io/socket.io.js"></script>

我还尝试绑定到heroku上的端口8000并使用完整路径名

<script type="text/javascript">
         var href = document.location.protocol + document.location.hostname + ':8000/socket.io/socket.io.js';
         console.log("href = " + href);
         document.write("<script src=" + href + "><\/script>");
     </script>

我确实读过websockets在heroku上不起作用,所以我在后端的after_start.js文件中有以下代码。除了配置socket.io以使用传输/轮询之外,我是否还需要做其他事情?

var port = process.env.PORT || 8000; //I've tried hardcoding to 8000 and using process.env.PORT and then I used the relative path for the script import
io = require('socket.io').listen(port);
//Configue io to work with heroku
io.configure(function () { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
});

加载myoku应用程序时出现此错误:

GET http://<myAppName>.herokuapp.com/socket.io/socket.io.js 404 (Not Found) 

编辑:我实际上正在使用geddy mvc框架,并希望得到这个工作我如何设置(基本上就像socket.io)在heroku上我发现这个答案让我觉得我可以类似地使用它: GeddyJS & socket.io: catching and emitting events from server side

1 个答案:

答案 0 :(得分:0)

AHAH!我忘了在配置中打开geddy的实时设置。

这是我做的:

添加了

, socketIo: true
, realtime: true

到配置文件

已添加

geddy.io.configure(function () { 
    geddy.io.set("transports", ["xhr-polling"]); 
    geddy.io.set("polling duration", 10); 
});

到after_start.js文件

使用geddy.io.sockets.emit(从后端发送事件。

<script src="/socket.io/socket.io.js"></script>在前端导入io

var href = document.location.protocol + document.location.hostname;
console.log('href = ' + href);
var socket = io.connect(href);

从前端打开一个套接字。