我正在使用所有东西的当前版本node.js,express.js,socket.io等...我正在尝试连接到一个服务器,它的唯一目的就是生成文本,然后将其发送到Web客户端通过socket.io连接。该文本不再是具有标准行结尾的字符串,并且最大数据速率大约为1024字节/秒。我的代码,核心位,是这样的
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 :(得分: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);
});