2014-10-04 69 views
0

我一直在socket.io和express.io之間來回跳動 - 但是使用Express 4解決了socket.io問題,因爲我想使用命名空間。將Socket.io添加到Express 4服務器 - 多個文件設置

我已經開發了一些使用Socket.io的Express 4服務器的示例 - 但大多數示例都基於一個文件,其中包含所有內容。我試圖分離所有的代碼以使它更容易,但是我對如何添加Socket.io(或其他地方)感到不知所措。

我有一個使用集羣index.js和基本要求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命名空間定義?

有很多使用套接字的方式,我似乎無法爲我的多文件方法找出最佳方法。

任何幫助將是輝煌的,因爲我似乎在圈子裏。

再次享受我們週六:)

感謝。

+0

對不起,但我不明白你問的是什麼問題?你只是想弄清楚如何將你的代碼分成多個文件?還是有更多的問題涉及到這個問題?而且,你的socket.io代碼在哪裏?我在啓動我的服務器的'app.listen()'調用之後立即執行了我的操作。 – jfriend00 2014-10-04 16:54:03

+0

嗨。基本上是的。我想了解如何將socket.io代碼添加或包裝到我所擁有的。我已經看到了很多實現套接字的方式,我不確定使用哪種樣式或方法。你會在一個單獨的文件中有你的套接字的文件名稱空間等文件?有了路線?謝謝 – Pandafinity 2014-10-04 20:01:37

+0

如果你有一段可重複使用的代碼,並且可能在其他項目中使用,或者如果你有足夠大的相關代碼,將它分解成它自己的文件是有意義的,你應該創建一個新文件。 'socket.io'在這方面不會產生獨特的問題。 – jfriend00 2014-10-04 20:17:21

回答

1

我已經花了一個上午的時間看看集羣/工作者的方法,並決定使用'SocketCluster',因爲它似乎做我需要的東西。

享受你的星期天