对节点顺序规则感到困惑(同步/异步)

Posted

技术标签:

【中文标题】对节点顺序规则感到困惑(同步/异步)【英文标题】:Confused about Node order rules (synchronous/asynchronous) 【发布时间】:2016-12-08 08:08:06 【问题描述】:

我的例子是一个简单的 HTTP 服务器:

http.createServer((req, res) => 
  if(req.method === `GET`)

    if(req.headers.cookie === undefined)
      let x = 1
      let y = 2
      let z = 30
    
    else
      let x = 10
      let y = 20
      let z = 3
    

    switch(req.url)

      case `/`:

        // >>>> I need the appropriate variables here for the same client <<<<

        break

      case `/page`:

        // >>>> or here <<<<

        break

      default:
        res.statusCode = 404
        res.end(`Error 404`)
    
  
).listen(3000)

当客户端连接时,变量由客户端是否有 cookie 定义。但是如果多个客户端几乎同时连接呢? Node 是如何处理的?

客户端是否有可能混淆变量,因为 if/else 语句发生在 switch 之前?我应该在每个 if/else 部分中放置 2 个 switch 副本吗?

还是没有区别?

【问题讨论】:

【参考方案1】:

每个连接在 Node 中都是它自己的“堆栈”,因此它们是独立的。实际上,每个连接都将拥有自己的 req 对象的副本/实例,而您编写的代码仅适用于该 req 对象。所有其他存在的req 对象都是它们自己的堆栈。

代码将按顺序发生,因此您可以安全地在切换之前使用 if/else。

【讨论】:

以上是关于对节点顺序规则感到困惑(同步/异步)的主要内容,如果未能解决你的问题,请参考以下文章

异步和同步术语

iOS中的同步与异步队列

Node.js - 我啥时候应该做异步的事情,啥时候做同步

哪一个是同步通信或异步通信?为啥?

猫鼬 findOne :异步和同步之间的不同

阻塞与同步、非阻塞和异步有啥区别? [复制]