4

しばらくして、node.js と socket.IO をもう一度試してみましたが、期待どおりに動作しませんでした。

私のセットアップ

  1. github から node.js をダウンロードし、debian スクイーズで実行されている外部 Web サーバーでコンパイルしました
  2. node.js プロジェクトのディレクトリを作成しました
  3. npmでsocket.ioをローカルに追加
  4. socketIO_server.js を作成し、次の 1 行のコードを追加しました。

    var socketIO = require('socket.io').listen(8000);
    
  5. socketIO_server.js を開始し、コンソール ログに「info - socket.io started」と表示されます

  6. http://domain.tld:8000を開くと、「socket.io へようこそ」というメッセージが表示されます。

問題

http://domain.tld:8000/socket.io/socket.io.jsでクライアント ライブラリにアクセスしようとすると、「socket.io へようこそ」というメッセージも表示されますが、コンソール ログには「静的コンテンツを提供しました」と表示されます。 /socket.io.js". なぜこれが起こるのか分かりません!並行して実行されているnginxサーバーがこの問題を引き起こしていますが、サーバーを停止しても何も変わりませんでした。

読んで助けてくれてありがとう!

4

2 に答える 2

6

これは、最近の変更で nodejs の EventEmitter lib にコミットが行われたことが原因です。socket.io でイシューをオープンしました。

https://github.com/LearnBoost/socket.io/issues/987

アップデート

この問題は、socket.io 0.9.12 で修正されました。

修正: https://github.com/LearnBoost/socket.io/blob/0.9.12/lib/manager.js#L116

コミット: https://github.com/LearnBoost/socket.io/commit/0d3313f536d0231932dd6617db449a071f5bc03a


ポートでリッスンしている場合、socket.io.js を提供できません。(ノード 0.9.1-pre、socket.io 0.9.9)

ノードへの最近のコミットにより、イベント リスナーをスプライスできなくなりました。これにより、元のイベント リスナーが削除されないため、socket.io.js クライアント ファイルにアクセスしようとすると、socket.io がウェルカム メッセージを表示します。

破損の例:

var socketIO = require('socket.io').listen(8000);

これは、ノード 0.9.1-pre で EventEmitter ライブラリのリスナーにアクセスする方法が変更されたため、壊れています。

socket.ioを壊すnodejs commit

EventEmitter.listeners(event) が、配列自体ではなくリスナー配列のコピーを返すようにします。

EventEmitter.prototype.listeners = function(type) {
   if (!isArray(this._events[type])) {
     this._events[type] = [this._events[type]];
   }        
-  return this._events[type];   
+  return this._events[type].slice(0);
};

https://github.com/joyent/node/commit/20e12e4be37f394672c001fdb9b05c0275731901#L1R245

相対 socket.io コード:

// reset listeners
this.oldListeners = server.listeners('request').splice(0);

https://github.com/LearnBoost/socket.io/blob/master/lib/manager.js#L115

于 2012-08-09T21:25:33.813 に答える
0

数日前にこの問題に遭遇しました。socket.io を v0.8.7 にダウングレードする必要があり、正常に動作しました。

于 2012-08-21T19:51:09.197 に答える