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

4

1 に答える 1

0

ああああ!config で 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 に答える