我一直在修补NodeJS一段时间。我似乎还不明白Node实际上是如何运行的。也许只是因为我无法摆脱PHP思维模式。我知道它与PHP有很大的不同,但我仍然无法理解这个想法 - 特别是当他们不断重复术语事件循环,事件驱动和 REPL
代码启动时“永远”运行吗?是喜欢后端的一个大型浏览器窗口,所有客户端都在看并且会监听某种 onRequest 来自他们的事件?
或者每个请求都是一个孤立的沙箱?代码是否针对每个请求运行,与其他请求分开?
我在视频中看到了套接字连接聊天的演示,看起来像第一点描述的那样运行。但是,如果所有人都能访问同一个“空间”,那么这不是“奇怪”吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
代码启动时“永远”运行吗?它是否像后端的一个大型浏览器窗口,所有客户端都在看它,并从它们那里收听某种onRequest事件?
你称之为'代码'是什么?启动http服务器后,通过调用listen函数,是的,它会永远运行,直到你终止进程。
或者每个请求都是一个孤立的沙箱?代码是否针对每个请求运行,与其他请求分开?
每个传入的请求(HttpGet,HttpPost)都在一个函数中处理。为简单起见,我不会使用术语回调。此函数是非阻塞异步函数。 在Javascript中,所有函数都是一些孤立的沙箱,但它们可以访问全局变量。
http.createServer(onRequest).listen(80);
var xvz;
function onRequest() {
var abc;
}
在上面的代码片段中,abc位于一个独立的沙箱中。但是,abc仍然可以访问xyz。
答案 2 :(得分:0)
您的代码生成的程序是持久的。正如您所描述的那样,就好像它是一个很大的旧浏览器窗口,接收请求并回复它们。
阅读以下示例。
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吗?)。