我想检查一下可以处理t1.micro实例(1GB RAM)的websocket的最大连接数。 所以我用nodejs(v6.2.1)和socket.io@1.4.6检查它是一个简单的例子。
以下是服务器上的代码:
require("http").globalAgent.maxSockets = Infinity;
var http = require('http').createServer(function(req, res) {});
var io = require('socket.io')(http);
io.on('connection', function(socket){
socket.on('echo me', function (data) { //receive msg from client
var msg = {msg: data.msg};
io.emit('echo me', msg);
delete msg.msg;
});
});
var clock = setInterval(function(){
global.gc();
}, 2000);
http.listen(3000, function(){
console.log('listening on *:3000');
});
客户端上的代码
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script type="text/javascript">
var n = 20;
var socket = [], id = [];
for(var i = 0; i < n; ++i){
socket[i] = io('http://aws_ip_address');
socket[i].on('connect', function(){
id.push(this.io.engine.id);
console.log('Connected to Server. My name is ');
});
socket[i].on('echo me', function(data){ //receive message from server
console.log(data.msg);
});
}
var inv = setInterval(function(){
sendEchoToServer();
}, 1000); //1 second
function sendEchoToServer(){
for(var i = 0; i < n; ++i){
var msg = 'My name is ' + id[i] + ' with msg: ' + Math.random();
socket[i].emit('echo me', {msg: msg});
}
}
</script>
我遇到的问题。当我在客户端上打开10个选项卡(200个连接)时,内存会按分钟增加几分钟。如果我打开350个连接,服务器将无法在5分钟内处理(操作系统将其终止)。 CPU获得100%。
我希望它可以处理超过500个连接,是否可能? 谢谢你提前。
答案 0 :(得分:1)
您可以将节点中的内存处理更改为更具侵略性。
有关可用选项的更多信息: https://gist.github.com/listochkin/10973974
node --expose-gc --optimize_for_size --max_old_space_size=460 --gc_interval=100 app.js