我安装了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字节数据,并将数据发送到所有连接的客户端 但似乎根本没有受到影响(测试过)
最后感谢您的帮助