求教node高并发中 变量是否会互相污染?
发布于 8 年前 作者 HuangStomach 3120 次浏览 来自 问答

假设我有一个高并发的socket服务 在某次请求的回调中将传递来的消息体存入变量 let data = balabala… 在高并发情况下 来自多个不同请求的data会不会互相污染? 请赐教……

3 回复
var  i=0;
var server = require('http').createServer(function(req, res) {
   var j=0;
	res.writeHead(200,{"Content-Type":" text/plain;"});
   var client=req.url.split("?")[1].split("=")[1];
    if(client ==2){
          i++;
          j--;
    }else {
          i--;
          j++;
    }
    res.end(" i:"+i+" j:"+j);
console.log(" i:"+i+" j:"+j);

});

server.on("listening",function(){
  
   console.log("listen 3000");
});


server.listen(3000);

开两个命令窗口 一个用 ab -n 10000 -c 100 http://localhost:3000/?client=1 另一个用 ab -n 10000 -c 100 http://localhost:3000/?client=2 同时敲回车,就知道结果了

相互污染…没有这个说法, 与 PHP 不同, 所有请求公用一个进程, 同一份全局变量… 至于你说在一个 function scope 赋值一个变量, 每次都会创建的好伐, Node.js 单线程, 指的是执行 js 部分是单线程的, so 不会

@magicdawn 的确是 谢谢……

回到顶部