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 ファイルに次のコードがあります。transports/polling を使用するように 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: サーバー側からのイベントのキャッチと発行