2013-02-14 44 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); 
});