这是一个简单的程序:
var express = require('express');
var app = express.createServer();
var count = 0;
app.get("/", function(req, res) {
res.send(count.toString());
count++;
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
当我在两个不同的浏览器中打开它时,第一个显示0和第二个显示1.
为什么?它们是不同的会话,所以我希望node.js为它们使用不同的子进程.我对PHP的理解是,共享变量应该使用数据库来实现.
为什么node.js可以在没有任何外部存储的情况下这样做?它是单进程但是多线程吗?
如何声明属于特定会话的变量?
Ray*_*nos 14
Node.js是单个进程.
您的代码在eventloop的ontop上运行.
JavaScript是单线程的.您运行的每一段代码都是单线程的.Node.js的是快和规模,因为它并没有对IO块(IO是瓶颈).
基本上你运行的任何javascript都是单线程的.JavaScript是单线程的.
当您调用nodeJS API的某些部分时,它会在C++级别内部使用线程,以确保它可以向您发送HTTP服务器的传入请求,或者将文件发送回文件访问.这使您可以使用异步IO
至于会议
app.use(express.session({ secret: "Some _proper_ secret" }));
...
app.get("/", function(req, res) {
if (req.session.count == null) {
req.session.count = 0;
}
res.send(req.session.count);
req.session.count++;
});
Run Code Online (Sandbox Code Playgroud)
Mat*_*rte 11
您所看到的"问题"并非特定于节点.它只是javascript中作用域的功能.您已经在服务器生命周期内的范围内声明了您的变量,而不是请求.
在用于响应路线的函数中声明变量将解决您的问题:
var express = require('express');
var app = express.createServer();
app.get("/", function(req, res) {
var count = 0;
res.send(count.toString());
count++;
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6097 次 |
| 最近记录: |