2013-02-14 45 views
0

我正在使用當前版本的所有東西node.js,express.js,socket.io等...我試圖連接到一個服務器,誰的唯一目的是在生活中只是噴出文字和然後將其發送到通過socket.io連接的網絡客戶端。文本不過是帶有標準行尾的字符串,最大數據速率大約爲1024bytes/sec。我的代碼,核心位,是這樣的Node.js緩衝套接字數據

var express = require('express') 
    , app = express() 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , server = require('http').createServer(app) 
    , io = require('socket.io').listen(server) 
    , path = require('path') 
    , dataSourcePort = 5000 
    , host = "10.0.1.32" 
    , dataStream = require('net').createConnection(dataSourcePort, host); 

dataStream.setEncoding('utf8'); 

io.sockets.on('connection', function (socket) { 
    dataStream.on('data',function(data){ 
     socket.emit("stuff",data); 
    }); 
    }); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler()); 
}); 

app.get('/', routes.index); 
app.get('/users', user.list); 

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

這工作都好得很,但在每一次,而它只是掛起,在數據停止走出去的客戶。我假設一個緩衝區被塞滿了某處,但不知道。有沒有更好的方法來做到這一點,並避免填充部分?

回答

0

主要的問題,我看到的是,你永遠不會拆散你的data處理程序,從而爲人們連接和斷開,你會積累data聽衆和內存使用情況,實現廢物資源試圖將數據發送到斷開插座。

io.sockets.on('connection', function (socket) { 
    function ondata(data){ 
    socket.emit("stuff",data); 
    } 

    function ondisconnect(){ 
    dataStream.off('data', ondata); 
    socket.off('disconnect', ondisconnect); 
    } 

    dataStream.on('data', ondata); 
    socket.on('disconnect', ondisconnect); 
});