NodeJS如何处理来自不同users/browsers的多个GET请求?
How does NodeJS process multiple GET requests from different users/browsers?
我想知道 NodeJS 如何处理来自不同 users/browsers 的多个 GET 请求,这些请求将事件发送到 return 结果?我想将其视为每次用户执行 GET 请求时,就好像为该用户启动了一个新会话。
例如,如果我有这个 GET 请求
var tester = require('./tester-class');
app.get('/triggerEv', async function(req, res, next) {
// Start the data processing
tester.startProcessing('some-data');
// tester has event emitters that are triggered when processing is complete (success or fail)
tester.on('success', function(data) {
return res.send('success');
}
tester.on('fail', function(data) {
return res.send('fail');
}
}
我在想的是,如果我打开浏览器并 运行 通过传递 some-data
并开始处理此 GET 请求。然后再打开另一个浏览器用不同的数据执行这个GET请求(模拟多个用户同时访问它),它会覆盖之前的startProcessing
函数并用新数据重新运行它。
因此,如果多个用户同时执行此 GET 请求,它是否会为每个用户单独处理它,就好像它是不同且独立的会话,然后 return 当有响应时每个用户的会话?还是会像我上面提到的那样(在这种情况下,我将不得不以某种方式为触发此 GET 请求的每个用户管理不同的会话)?
我想做到这一点,以便执行此 GET 请求的每个用户都不会干扰也同时执行此 GET 请求的其他用户,并且每个用户的正确响应都是 returned根据自己的数据发送给startProcessing
函数。
谢谢,我希望我说得有道理。如果没有会澄清。
如果您在不同请求之间共享全局 tester
对象,那么第二个请求将干扰第一个请求。由于所有传入请求都在 node.js 中使用相同的全局环境,因此通常的模型是任何可能 "in-flight" 一段时间的请求都需要创建自己的资源并为自己保留它们。然后,如果在第一个请求仍在等待完成时有其他请求到达,那么它也会创建自己的资源,两者不会冲突。
服务器环境在您使用该术语的方式中没有 "sessions" 的概念。除了为每个传入请求创建的 request
和 response
对象之外,每个请求都没有单独的 server-session 或服务器状态。这不像 PHP - 每个请求都没有一个全新的解释器状态。
I want to make it so that each user that executes this GET request doesn't interfere with other users that also execute this GET request at the same time and the correct response is returned for each user based on their own data sent to the startProcessing function.
然后,不要在请求之间共享任何资源,也不要使用任何具有全局状态的对象。我不知道你的 tester
是什么,但是将多个请求彼此分开的一种方法是为每个请求创建一个新的 tester
对象,这样他们就可以尽情使用它没有任何冲突。
我想知道 NodeJS 如何处理来自不同 users/browsers 的多个 GET 请求,这些请求将事件发送到 return 结果?我想将其视为每次用户执行 GET 请求时,就好像为该用户启动了一个新会话。
例如,如果我有这个 GET 请求
var tester = require('./tester-class');
app.get('/triggerEv', async function(req, res, next) {
// Start the data processing
tester.startProcessing('some-data');
// tester has event emitters that are triggered when processing is complete (success or fail)
tester.on('success', function(data) {
return res.send('success');
}
tester.on('fail', function(data) {
return res.send('fail');
}
}
我在想的是,如果我打开浏览器并 运行 通过传递 some-data
并开始处理此 GET 请求。然后再打开另一个浏览器用不同的数据执行这个GET请求(模拟多个用户同时访问它),它会覆盖之前的startProcessing
函数并用新数据重新运行它。
因此,如果多个用户同时执行此 GET 请求,它是否会为每个用户单独处理它,就好像它是不同且独立的会话,然后 return 当有响应时每个用户的会话?还是会像我上面提到的那样(在这种情况下,我将不得不以某种方式为触发此 GET 请求的每个用户管理不同的会话)?
我想做到这一点,以便执行此 GET 请求的每个用户都不会干扰也同时执行此 GET 请求的其他用户,并且每个用户的正确响应都是 returned根据自己的数据发送给startProcessing
函数。
谢谢,我希望我说得有道理。如果没有会澄清。
如果您在不同请求之间共享全局 tester
对象,那么第二个请求将干扰第一个请求。由于所有传入请求都在 node.js 中使用相同的全局环境,因此通常的模型是任何可能 "in-flight" 一段时间的请求都需要创建自己的资源并为自己保留它们。然后,如果在第一个请求仍在等待完成时有其他请求到达,那么它也会创建自己的资源,两者不会冲突。
服务器环境在您使用该术语的方式中没有 "sessions" 的概念。除了为每个传入请求创建的 request
和 response
对象之外,每个请求都没有单独的 server-session 或服务器状态。这不像 PHP - 每个请求都没有一个全新的解释器状态。
I want to make it so that each user that executes this GET request doesn't interfere with other users that also execute this GET request at the same time and the correct response is returned for each user based on their own data sent to the startProcessing function.
然后,不要在请求之间共享任何资源,也不要使用任何具有全局状态的对象。我不知道你的 tester
是什么,但是将多个请求彼此分开的一种方法是为每个请求创建一个新的 tester
对象,这样他们就可以尽情使用它没有任何冲突。