节点js被ifw阻止的套接字io

时间:2014-04-28 09:35:08

标签: node.js websocket socket.io firewall

我安装了socket.io v 0.9.16,在ubuntu 12.04中使用'open VZ'1gb ram表达v 4.1作为ajax的一个非常快的替代方案,并减少了我的网站的服务器负载。每一件事都很好。

但是大约有700名客户在线,并且出现了更多问题 我检查服务器负载低于0.1 我检查了sys日志我看到一些ufw禁令消息“[ufw block]”这意味着:我的客户端是带防火墙的拦截器

我删除了一些默认的ufw,因为ufw工作的开放vz 我在ufw中为dos保护添加了这条规则

-A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

禁用ufw会减少我的问题,但我也会遇到其他问题

xhr和jsonp是acitvated而不是websocket 有时服务静态socket.io文件很难加载某些客户端

拥有约800个在线客户及更多

我的代码已附上

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

server.listen(8080);

io.enable('browser client minification' , true);
io.enable('browser client etag' , true);
io.enable('browser client gzip' , true);

  io.set('transports', [
    'websocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
  ]);

io.set('log level', 1);
var run = 0;

var md5 = require('MD5');
var hash = md5("my secret");

function sendPrices(data) {
  io.sockets.emit('prices', JSON.parse(data));
}

app.get('/', function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('');
  if(hash == req.query.secret) {
    sendPrices(req.query.prices);
  }
});

io.on('connection', function(socket) {
    run++;
    socket.emit('online', run);
    socket.on('disconnect', function(socket) {
        run--;
    });
});


function sendOnlines() {
  io.sockets.emit('online', run);
}

setInterval(function() {sendOnlines();}, 10000);

从主服务器每4秒获取100字节数据,并将数据发送到所有连接的客户端 但似乎根本没有受到影响(测试过)

最后感谢您的帮助

0 个答案:

没有答案