3

エクスプレスノードアプリを使用していますが、app.jsにすべてのsocket.ioを含まないようにすることで、コードを整理しようとしています。

私はこれについて行くための最良の方法を知りません。これが私の最初の考えですが、これは最もきれいなもののようには感じられません

// app.js
var express = require('express')
    , app = express()
    , server = require('http').createServer(app)
    , url = require('url')
    , somePage = require('./routes/somePage.js')
    , path = require('path');

    app.configure(function(){...});

    app.get('/', somePage.index);

とルート

// somePage.js
    exports.index = function (req, res, server) {
        io = require('socket.io').listern(server)
        res.render('index',{title: 'Chat Room'})

        io.sockets.on('connection', function(socket) {
            ...code...
        }
    }

近くにいるような気がしますが、まだそこにはありません

4

2 に答える 2

9

私がその権利を読んでいるかどうかはわかりませんが、リクエストのたびにソケットサーバーを起動しているよう/です。率直に言って、少し驚いています。

これが、socket.ioコードをapp.jsから分離する方法です(2.xとは少し異なるexpress 3.xを使用):

// app.js
var express = require('express');
var app = express();

var server_port = config.get('SERVER_PORT');
server = http.createServer(app).listen(server_port, function () {
    var addr = server.address();
    console.log('Express server listening on http://' + addr.address + ':' + addr.port);
});

var sockets = require('./sockets');
sockets.socketServer(app, server);


// sockets.js
var socketio = require('socket.io');
exports.socketServer = function (app, server) {
  var io = socketio.listen(server);

  io.sockets.on('connection', function (socket) {
    ...
  });
};

お役に立てば幸いです。

于 2012-09-23T14:35:22.060 に答える
1

同様のアプローチは、appindex.jsファイルに渡して、そこでhttpおよびsocketioサーバーを開始することです。

//app.js
//regular expressjs configuration stuff

require('./routes/index')(app);   //all the app.get should go into index.js

appはindex.jsファイルに渡されるため、index.js内でルーティングを実行したり、socketioapp.get()に接続したりできます。

//index.js
module.exports = function(app){

var server = require('http').createServer(app)
    ,io = require('socket.io').listen(server);

app.get('/', function(req, res){
 });

server.listen(app.get('port'), function(){
   console.log("Express server listening on port " + app.get('port'));
});


io.sockets.on('connection', function(socket){  
   socket.on('my event', function(data){
   console.log(data);
  });
});

io.set('log level',1);

//io.sockets.emit(...)
于 2013-08-29T16:27:25.500 に答える