Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

NodeJS连接数测试

  一直没好好的做过NodeJS的连接数测试,这回想做一些东西要用到NodeJS,所以就自己做一下这个测试。网络上的数据貌似有点玄乎,只有结果没有实验过程很难让人信服,有些东西就是得亲手试过才知道。总之,NodeJS的性能还是可以的,至少比我以前了解的好。
  下面是NodeJS的代码 require('http').createServer(function(req,res){
  //输出到控制台
  console.log(req.url+' '+'connected');
  //每秒发送一个当前时间
  //不要吐槽我创建这么多计时器,实际业务会遇到更复杂的东西
  var itv=setInterval(function(){
    res.write(new Date+'');
  },1000);
  //捕捉连接的关闭事件
  req.connection.on('close',function(){
    console.log(req.url+' '+'disconnected');
    clearInterval(itv);
  });
  //不释放请求,保持长连接
}).listen(8000);
  然后是用户测试的客户端代码,由于我是在Win7上测试的,所以直接用VBS写了,Linux党不要喷我 Dim s(),n
n=5000
ReDim s(n)

For i=0 To n
  Set s(i)=CreateObject("MSXML2.serverXMLHTTP")
  s(i).Open "GET","http://127.0.0.1:8000/"&i,True
  s(i).Send
Next

MsgBox "OK"
  这个客户端程序是比较吃内存的,如果单个WScript进程占用太多内存会导致VBS程序奔溃,所以5000就差不多啦。也许是因为我电脑的配置比较烂吧,如果运行两次这个VBS程序,后面的5000个就很卡。不要吐槽我的测试结果,性能测试这种东西都是和环境有关的,结果不同没啥奇怪的,我只是提供了一个测试而已。

  但是至少这5000个连接都是货真价实的长连接,而且还有5000个计时器每秒向客户端发送数据。VBS有个性质就是当所有代码运行完时候就会结束掉自身进程并释放内存,所以这里需要一个MsgBox来让进程保持住。当关闭这个MsgBox时服务器也能检测到客户端连接的断开,控制台会刷出一片disconnected,这里就不截图了。
  扯点题外话吧!要捕捉客户端断开事件,在PHP之类的应用层程序中只能自己提供心跳包。虽然TCP默认自带心跳包,但传输层是由Apache之类的Web服务器来管理的,除非它们提供了API,否则PHP无法控制。而NodeJS本身就是传输层的,所以这方面有很大优势。
  其实一个服务器能跑5000个连接就不错了,况且我的测试环境配置远不如服务器。所以NodeJS的性能还是很乐观的,只要不是什么变态需求,它都能够胜任。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^