5

だから私はあなたがおそらくすでに千回見たことがあるこの非常に基本的なsocket.ioセットアップを持っています。

ここでは、ファイルがapacheを介して提供されることに注意してください。

サーバー(app.js)

var io = require('socket.io').listen(8080);

io.sockets.on('connection', function(socket){ 
    socket.emit('server ready', {msg: 'hi'}) ;

    socket.on('random event', function(data) {
        console.log('received');
    })
}); 

クライアント

$(document).ready(function() {
    var socket = io.connect('http://127.0.0.1:8080/projectname/server/');

    socket.on('server ready', function(data){ 
        console.log('server ready!'); 
    });

    socket.emit('random event', {hurr: 'durr'});
});

しかし、私が得る唯一の出力は

 debug - websocket writing 5:::{"name":"server ready","args":[{"msg":"hi"}]}

ノードコンソールでは何も表示されず、クライアントコンソールでは何も表示されません。どちらが間違っています。

私はsocket.ioWebサイトの基本的な例を試しましたが、まったく同じ動作を示しています。放出されたデータをノードコンソールに記録しますが、他には何も起こらないようです。

編集:さらに調査すると、Firefoxでサイトにアクセスすると、ノードコンソールに別の出力が作成されます。

info  - handshake authorized 178702677759276313
   debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239192
   debug - setting poll timeout
   debug - client authorized for 
   debug - clearing poll timeout
   debug - xhr-polling writing 1::
   debug - set close timeout for client 178702677759276313
   debug - xhr-polling received data packet �17�1::/stock/server/�66�5::/stock/server/:{"name":"random event","args":[{"hurr":"durr"}]}
   debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239263
   debug - setting poll timeout
   debug - clearing poll timeout
   debug - xhr-polling writing 5:::{"name":"server ready","args":[{"msg":"hi"}]}

これは、クライアントから送信されたデータが実際にサーバーに到達したように見えます。ただし、実際の問題は解決されていないようです。console.log行と、クライアント側とサーバー側の両方が実行されました。この出力はFirefox5.0.1からのもので、xhrにフォールバックしているようです。

よろしくお願いします!

4

1 に答える 1

4

あなたprojectnameがそうならstock、それはあなたの問題です。Socket.IOは、名前空間を使用していると考えています。これはxhr-polling received data packetログ行で確認できます。console.logサーバー側でその名前空間をリッスンしていないため、が呼び出されることはありません。

クライアント接続アドレスを削除し、クライアント側ライブラリを適切に参照して、404が取得/projectname/serverされないようにする必要があります。これがApacheプロキシの問題であるかscript src、ヘッダーのを修正するかは、現在の設定によって異なります。あなたが提供したコードからはわかりません。

PS:Socket.ioはでクライアントライブラリを提供する必要http://127.0.0.1:8080/socket.io/socket.io.jsがありますが、ポート80でApacheサーバーによって提供されるドキュメントからそのアセットを参照することで、クロスドメインオリジンポリシーの問題が発生する可能性があります。socket.io-clientモジュールdistフォルダにあるApacheサーバー。

于 2012-06-07T17:07:01.097 に答える