0

エクスプレスルートまたはルーターページ内のすべてのsocket.io機能を維持することにより、エクスプレスノードアプリをクリーンアップしようとしています(ここで回答された質問に依存しています: Nodejs include socket.io in router page )。なんらかの理由で、ソケット接続が開かれません (「成功」がログに記録されません)。

//app.js
server = http.createServer(app).listen(3000);
app.get('/', function(req,res){
   routes.index(req,res,app,server);  
 });

私の routes.index は次のようになります。

//routes.index
var socketio = require('socket.io');
exports.index = function(req,res,app,server){
  var io = socketio.listen(server);
  server.listen(3000);
  console.log("routed correctly?"); //yes, it is routed correctly. 
  io.sockets.on('connection', function (socket) {
    console.log("success");
  });
  res.render('index');
};

何か案は?とても有難い。

4

3 に答える 3

1

exports.index誰かが要求するたびに、新しい socket.io サーバーを再作成しているので、これはあまり意味がないと思います。Socket.io は、ルートに沿って存在する通信レイヤーとなることを意図しています。

于 2013-08-09T18:21:41.093 に答える
1

その答えによると、これはまさにあなたがやりたくないことです

このロジックでは、/ルートがヒットするたびに、イベントに別のリスナーを追加しますconnect。これは、ルート ロジックの外で 1 回だけ実行する必要があります。さらに、サーバーはポート 3000 で複数回リッスンしようとしています。

特定のユーザー Web セッションのソケットにアクセスする場合は、session.socket.ioconnectなどを使用して、イベントから受け取ったソケットをそのユーザー セッションに関連付ける必要があります(これを行うライブラリは複数あります - これはほんの一例です)。 )

于 2013-08-09T18:25:48.740 に答える