我启动socket.io的服务端 代码如下
var config = require('./config/config.js');
var express = require('express');
var app = express();
var path = require('path');
var http = require('http').Server(app);
var socket = require('socket.io-client');
var io = require('socket.io')(http, {
pingInterval: 14,
});
app.use(express.static(path.join(__dirname, 'public')));
http.listen(config.socket.port, () => {
console.log('listening on port:' + config.socket.port);
});
var count1 = 0;
var count2 = 0;
io.on('connection', (socket) => {
count1++;
console.log('connection:'+count1);
socket.on('msg',(data) => {
socket.emit('msg', 'server send');
});
socket.on('disconnect', (socket) => {
count2++;
console.log('disconnect:'+count2);
});
});
然后我客户端是使用socket-stress-test测试脚本进行连接测试
var SocketPromiseHandler = require('socket-stress-test');
var count = 0;
var disconnect = 0;
socket_handler = new SocketPromiseHandler({
ioUrl: 'http://xxxx:3389/'
, connectionInterval: 300 // Fire one each second
, maxConnections: 200 // Stop at having 1000 connections
, ioOptions: {
transports: ['websocket'] // force only websocket (optional)
}
});
socket_handler.new((socketTester, currentConnections)=>{
count++
console.log('client send:' + count);
})
.disconnect(function(socketTester) {
disconnect++;
console.log('disconnect:' + disconnect);
})
.run();
//100(ms) is interval for send event
上面这种当我运行达到200多条以后就会出现断连现象 然后我使用自己写的一种测试脚本
const io = require('socket.io-client');
var count = 0;
var disconnect = 0;
var errrr = 0;
function connect() {
if (count++ >= 500) {
return;
}
let socket = io('ws://xxxx:3389', {
reconnection: false
});
socket.on('connect', () => {
connect();
setInterval(()=>{
socket.emit('msg', 'client send:'+socket.id);
},10000);
});
socket.on('msg',(data) => {
// console.log(data);
});
socket.on('disconnect', () => {
disconnect++;
console.log('disconnect:' + disconnect);
});
socket.on('error', (error) => {
// console.log(error)
errrr++;
console.log('error:' + errrr);
});
socket.on('reconnect', () => {
console.log('reconnect');
});
}
connect();
使用上面这个脚本一样是达到上百条时候断连了。 我还试过使用本机和虚拟机一起往服务端使用测试脚本,然后出现问题的情况更早出现了(可以说是原先出现问题的一半大概) 而且如果超过一定连接情况,就会把前面连接的持续断掉。 我想问下出现这些问题到底是我服务端配置有问题还是客户端呢。 因为我的服务器是Linux我也做了 查看liunx 最大文件句柄数 cat /proc/sys/fs/file-max 查看进程使用的文件句柄数 ls /proc/pid/fd | wc -l 查看进程句柄数限制 cat /proc/pid/limits | grep “files” 修改/etc/sysctl.conf 添加 fs.file-max=1000000 这些提升操作还有一些网上找的 ulimit -n等操作。但还是没用。有没有大佬懂得呀
200左右的门槛 应该是应用级别的限制。比如 nginx 或者 socket.io 自身
@waitingsong 是说socket.io本身限制吗?我是没有使用nginx的呀
你先在服务器上测试链接数,如果没问题的话就是客户端的网络问题,如果你的客户端是在路由器下面和别人共用一个公网地址,那你的端口资源也会被限制。