0

我用 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); 
});

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

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

编辑:我实际上正在使用 geddy mvc 框架,并希望在 heroku 上设置它(基本上就像 socket.io),我发现这个答案让我看起来可以类似地使用它: GeddyJS & socket.io:从服务器端捕获和发出事件

4

1 回答 1

0

啊啊!我忘记在配置中打开 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);

从前端打开一个套接字。

于 2013-04-14T03:34:43.807 回答