CNode

在Linux下,TCP client重复连接服务端一个端口,出现Error: connect EMFILE错误

Qqianqing发布于13 年前最后回复13 年前13 回复11870 浏览0 收藏

用nodejs的net模块写一个客户端,连接其他主机的一个端口并发送一包数据,然后断开。在进行压力测试的时候,出现Error: connect EMFILE错误,有人遇到过吗

查看回复

回复 (13)

A
asoedarren#1·13 年前

超過1024 file descriptor , 請搜ulimit

X
xuyufei#3·13 年前
引用 xuyufeiLinux 对用户文件打开数量有限制的,默认貌似是1024个,你可以通过更改这个限制再做压力测试。使用linux 命令 ulimit 查看一下。client.end()方法确实socket已经...

@qianqing 如果你想彻底释放,可以调用destroy()方法把这个socket销毁;一般服务器端才这样做,客户端就一个连接,不会影响的

Q
qianqing#4·13 年前
引用 asoedarren超過1024 file descriptor , 請搜ulimit

client.write(str); client.end(); 这种写法是不是已经正常关闭连接了?? write方法不能写成下面这样吗: client.write(string,function(){ ........ });

X
xuyufei#5·13 年前

Linux 对用户文件打开数量有限制的,默认貌似是1024个,你可以通过更改这个限制再做压力测试。使用linux 命令 ulimit 查看一下。client.end()方法确实socket已经断开了

I
icetoggle#6·13 年前

可能是因为你断开是在回调里 才断开。你的程序流程可能是先建立了n多连接后,再一个个断开。先建立n个连接的时候就已经超过了 nodejs的连接限制。

Q
qianqing#9·13 年前
引用 icetoggle可能是因为你断开是在回调里 才断开。你的程序流程可能是先建立了n多连接后,再一个个断开。先建立n个连接的时候就已经超过了 nodejs的连接限制。

client.on('connect',function(){ client.write(str); client.end(); }); 我的代码是上面这样的,end确实是放在‘connect’时间的回调里,这样写有什么问题吗?

参与回复
登录后即可参与回复。登录