0

我一直在 socket.io 和 express.io 之间来回切换——但我选择使用 Express 4 的 socket.io,因为我想使用命名空间。

我已经研究了一些使用 Socket.io 拥有 Express 4 服务器的示例 - 但大多数示例都基于一个包含所有内容的文件。我试图分离我的所有代码以使其更容易,但我不知道如何添加 Socket.io(或在哪里)。

我有 index.js,它使用 Cluster,基本上调用 server.js:

var server = require( "./server.js" );
var cluster = require('cluster');

var webApp={
    run: function(){
      console.log('Starting: Server');
      server.listen();
    }
};

if(cluster.isMaster){
    cluster.fork();
    cluster.on('exit',function(worker){
      console.log('Worker ' + worker.id + ' died..');
      setTimeout( function () { cluster.fork(); }, 1000 );
    });
} else{
    try {
        webApp.run();
    }
    catch(e)
    {
        console.log(e);
        process.exit(1);
    }
    process.on('uncaughtException', function(err){
        console.log(err);
        process.exit(1);
    });
    process.on( 'SIGINT', function () {
      console.log( "\n SIGINT (Crtl-C)" );
        //Kill worker
        cluster.disconnect();
        process.exit(1);
    });
}

然后调用 server.js 文件:

var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var config = require('./config/config.js');
var router = require('./routes');

var Server = Object.subClass({
  /**
     * Constructor
     */
  init:function(){
    this.appServer = express();
    var that = this;
    var appServer = this.appServer;

    appServer.use(express.static(__dirname + '/public'));
    appServer.set('views', path.join(__dirname, 'views'));
    appServer.set('view engine', 'ejs');
    appServer.use(bodyParser.urlencoded({ extended: true }));
    appServer.use(bodyParser.json());
    appServer.get('/',router.root);
  },
  /**
    * Listener HTTP
    */
  listen:function(){
    var port = config.rest.port;
    console.log(':: on port:' + port);
    this.appServer.listen(port);
  }
});

module.exports = new Server();

我只有一个“路线”,即“/”,在 routes.js 文件中定义。页面加载正常,但我在哪里添加服务器端 socket.io?我是否在 routes.js 文件或正在加载的页面的 javascript 中添加任何 socket.io 命名空间定义?

使用套接字的方法有很多,我似乎无法为我的多文件方法找到最佳方法。

任何帮助都会很棒,因为我似乎在绕圈子。

享受我们的星期六:)

再次感谢。

4

1 回答 1

1

我花了一上午的时间研究 Cluster/Worker 方法,并决定使用“SocketCluster”,因为它似乎可以满足我的需要。

享受你的星期天

于 2014-10-05T12:41:50.820 回答