Node.js NodeJS如何运行的概念以及每个请求的空间

Node.js NodeJS如何运行的概念以及每个请求的空间,node.js,Node.js,我已经在NodeJS上修补了一段时间了。我似乎仍然不明白节点实际上是如何运行的。也许只是我无法摆脱PHP思维。我知道它与PHP有很大的不同,但我仍然不能理解这个想法——特别是当他们不断重复术语事件循环、事件驱动和REPL时 代码启动时是否“永远”运行?它是否像后端的一个大的“ol浏览器”窗口,所有客户端都会看到它,并侦听来自它们的某种onRequest事件 或者每个请求都是一个孤立的沙箱?代码在哪里为每个请求运行,与其他请求分开 我在视频中看到了socket connection chat的

我已经在NodeJS上修补了一段时间了。我似乎仍然不明白节点实际上是如何运行的。也许只是我无法摆脱PHP思维。我知道它与PHP有很大的不同,但我仍然不能理解这个想法——特别是当他们不断重复术语事件循环、事件驱动和REPL时

  • 代码启动时是否“永远”运行?它是否像后端的一个大的“ol浏览器”窗口,所有客户端都会看到它,并侦听来自它们的某种onRequest事件

  • 或者每个请求都是一个孤立的沙箱?代码在哪里为每个请求运行,与其他请求分开

我在视频中看到了socket connection chat的演示,它的运行似乎与第一点描述的一样。但这不是所有人都能进入同一个“空间”的“wierd”吗

  • 节点代码不需要永远运行。您看到的典型用例将Node用作http服务器(顺便说一句,这是Node的卖点之一;一个大约5行代码的基本http服务器),因此它将永远运行
  • 单个请求被隔离,因为它们在回调中被处理或响应。回调使用一个称为闭包的概念,它确保在调用回调时保持回调的状态。因此,每个响应都是一个回调,用于保持其状态。一个关于闭包和回调的好链接
  • 这些回调异步运行,因此主事件循环可以自由处理进一步的请求
  • 代码启动时是否“永远”运行?它是否像后端的一个大的“ol浏览器”窗口,所有客户端都会看到它,并侦听来自它们的某种onRequest事件

    “代码”指的是什么?一旦您通过调用listen函数启动http服务器,它将永远运行,直到您终止该进程

    或者每个请求都是一个孤立的沙箱?代码在哪里为每个请求运行,与其他请求分开

    每个传入请求(HttpGet、HttpPost)都在一个函数中处理。为了简单起见,我不使用回调这个术语。此函数是一个非阻塞异步函数。 在Javascript中,所有函数都是某种孤立的沙盒,但它们可以访问全局变量

    http.createServer(onRequest).listen(80);
    var xvz;
    function onRequest() {
     var abc;
    }
    

    在上面的代码片段中,abc位于一个独立的沙箱中。但是,abc仍然可以访问xyz。

    代码的结果程序是持久的。正如您所描述的,它就像一个巨大的旧浏览器窗口,接收请求并回复请求

    阅读下面的例子

    var http = request("http");
    var shared = 1;
    
    function procreq (req, res)
    {
        var notshared = 1;
        res.writeHead(200, { "Content-Type": "text/plain" });
        res.end(String(shared++) +  ', ' + String(notshared++));
    }
    
    var server = http.createServer(procreq);
    server.listen(8080);
    

    通过运行该服务器示例,您可以看到程序是如何持久化的,并且
    shared
    变量对于所有请求都可见,它是一个真正的服务器共享变量。如果我没记错的话,我认为在PHP中,您可以通过memcached(或者是APC?)实现这一点。

    只是一个补充:单个请求只需按照您的要求进行隔离即可。每个请求都会调用回调,但是您可以很容易地在请求之间共享资源,因为请求是在同一个程序中处理的。