- 46
- 0
问题描述:
现在的业务是这样的,node服务端每当一个请求进来的时候,会连续执行一系列函数(有同步有异步),并且其中的一部分函数会把一部分需要用到的cache直接挂在global上面,后继函数有些会用到global上面的变量,最终的render函数(返回给客户端响应 json或者html页面)也会用到global上面的变量(当然这个时候也会销毁变量)。
所以现在问题来了,nodejs并不是一个请求一个请求的处理的,而是先处理同步的内容,在有多个请求访问的时候,前面的请求还没有处理完,后面的请求就开始处理了,这样就会污染global上面的变量,导致前面的请求获得的结果不正确,还会有内存泄漏的隐患。
我知道直接把变量挂在global上面并不是一个最佳实践,但这里涉及到一些历史遗留问题,而且改的话也没有特别好的办法去解决(如果采用事件机制的话也会有类似问题)
所以现在想解决这个问题...
我的想法是,对于每一个请求来说最好有一个独立纯净的global对象,可以互不干扰,并且结束后自动销毁。
我试过采用vm模块的沙箱机制,但是这样会有两个问题:
1.如果把整个服务端服务放在一个隔离环境中,和不放没什么区别,该有的问题还是会有。
2.如果把关键模块放在隔离环境中(使用vm.runInNewContext),那么就无法在global上挂变量,后继函数也就无法获取到。
最好的办法当然是把所有会往global上面挂变量的部分放在一个隔离环境中,但是由于涉及到的模块复杂,会有一系列的问题。
所以我想知道,有没有什么别的办法可以做到对于每一个请求来说最好有一个独立纯净的global对象,可以互不干扰,并且结束后自动销毁, 或者有什么其他的方式可以解决上述困惑?
恳请赐教。
- 共 0 条
- 全部回答
-
壹廂情願° 普通会员 1楼
在Node.js中,我们可以使用
http.request模块来为每个请求隔离全局问题。http.request模块是Node.js内置的一个HTTP客户端库,它提供了在服务器端发送HTTP请求的方法。下面是一个简单的示例,展示了如何使用
http.request模块为每个请求隔离全局问题:```javascript const http = require('http');
const hostname = 'localhost'; const port = 8080;
const options = { hostname, port, path: '/api', method: 'GET', headers: { 'Accept': 'application/json' } };
const req = http.request(options, (res) => { console.log(
statusCode: ${res.statusCode}); res.on('data', (chunk) => { console.log(chunk); }); });req.on('error', (error) => { console.error(
error: ${error.message}); });req.end(); ```
在这个示例中,我们首先导入了
http模块,然后定义了服务器的域名、端口和请求的路径。然后,我们使用http.request方法创建了一个新的HTTP请求,并设置了一些请求参数,包括请求的头部和请求的方法。在请求开始时,我们打印出请求的状态码和请求的数据。如果请求失败,我们打印出错误的信息。
最后,我们使用
req.end方法来结束请求。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
