2013-04-14 96 views
0

我使用node.js設置了Socket.IO,它通過偵聽/連接到端口8000(或另一個不是我的服務器的端口的端口)工作在本地開發計算機上正在運行)。在Heroku上使用Node.js的Socket.IO

當我嘗試在heroku上做同樣的事情時,我的客戶端腳本導入失敗。

我已經試過相對路徑

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

我也試圖綁定到端口8000在Heroku和使用的全路徑名

<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框架,並希望得到這個工作,我怎麼把它設置(基本上只是像socket.io)在heroku上,我發現這個答案,使得它看起來像我可以使用它類似: GeddyJS & socket.io: catching and emitting events from server side

+0

你需要使socket.io監聽你的主'服務器'實例(與Express一起使用) – SLaks

+0

你是否啓動了一個http服務器,如express,或者只是socket.io? –

+0

已更新原始帖子。我正在使用Geddy。 –

回答

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>進口的前端

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

IO要打開從前端的插座。

相關問題