2012-08-23 25 views
6

Đây là mã máy chủ của tôi:cụm nút với socket.io và expressjs

Tôi đang cố gắng sử dụng cụm với socket.io và expressjs. Tôi đang thử nghiệm này trên máy tính để bàn lõi tứ của tôi.

var cluster = require('cluster') 
var numCPUs = require('os').cpus().length 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork() 
    } 

    console.log(new Date()); 
} 
else { 
    // get required modules 
    var connect = require('connect'); 
    var express = require('express'); 
    var mongo = require('mongodb'); 
    var MongoStore = require('connect-mongo')(express); 
    var server; 
    var redis = require('redis'); 
    var http = require('http'); 

    // create server object 
    app = exports.module = express(); 


    function configureServer() { 
    //configure environments 
    app.configure('production', function() { 
     app.use(express.errorHandler()); 
    }); 

    //configure server instance 
    app.configure(function() { 
     app.use(express.compress()) 
     // set jade as default view engine 
     app.set('view engine', 'jade'); 
     app.use(express.bodyParser()); 
     app.use(express.cookieParser("refdgfd")); 

     app.use(express.methodOverride()); 
     app.use(app.router); 
     // use express logger 
    }); 

    loadModules(); 
    } 

    var server = http.createServer(app).listen(80); 

    socket = require('socket.io').listen(server); 

    var RedisStore = require('socket.io/lib/stores/redis') 
    , pub = redis.createClient() 
    , sub = redis.createClient() 
    , client = redis.createClient(); 
    socket.set('store', new RedisStore({ 
    redisPub : pub 
    , redisSub : sub 
    , redisClient : client 
    })); 

    socket.configure(function() { 
    socket.set('log level', 1); 
    socket.set('transports', ['websocket']); 
    }); 

    configureServer(); 
} 

Có điều gì nổi bật thực sự sai không?

Nhật ký cho biết mọi thứ diễn ra 4 lần. Điều đó có vẻ đúng. Nhưng người dùng kênh của socket.io cũng chỉ ra rằng bất cứ khi nào tôi kết nối với một trang, tôi kết nối 4 lần, (tạo 4 ổ cắm người dùng). Điều đó có vẻ sai. Làm thế nào để sửa chữa nó và có những thứ khác sai với mã của tôi. Cảm ơn.

+0

Tôi có cùng một vấn đề. Thư trùng lặp trong số lõi. Tôi đã thử tất cả các kết hợp trên mạng và không có may mắn. Bạn đã tìm thấy bất kỳ sửa chữa cho điều này? – Maziyar

Trả lời

3

Tại thời điểm này socket.io không có hỗ trợ đầy đủ cho node.js cluster. Nó hoạt động tốt cho tôi với vận chuyển websocket, nhưng xhr-pooling không thành công. Bạn có thể tìm hiểu thêm về vấn đề này: #939, #917. Vấn đề là yêu cầu xhr-pooling có thể tham gia vào chủ đề khác với yêu cầu ban đầu được ủy quyền.

+0

Cảm ơn, tôi thực sự chỉ sử dụng websocket, bị bỏ quên để bao gồm trong mã của tôi, tôi đã cập nhật nó ngay bây giờ. xhr-polling có một số vấn đề khác với những vấn đề được đề cập ở đây và websocket nói chung là đáng tin cậy thông qua SSL. – Harry

Các vấn đề liên quan