CNode

请教nodejs中怎么动态修改服务器配置

问答
Hhaozxuan发布于11 年前最后回复11 年前17 回复9525 浏览0 收藏

如题:现有一个需求是,在服务器不重启的情况下,更新配置文件内容,并且服务器使用更新后的配置参数。 举个栗子: untitled1.png 模拟一个服务器进程,该服务器进程的任务是循环打印出配置文件message中的message字段,现在突然修改message字段,想让其作用到服务进程中,在不重启的情况下,怎么做到?

查看回复

回复 (17)

S
sjfkai#1·11 年前
H
haozxuan#2·11 年前
引用 sjfkai了解不多,或许你可以试试这个api [fs.watchFile(filename\[, options\], listener)](https://nodejs.org/api/fs.html...

@sjfkai 额,这个有点跑偏了,你做的工作是监控文件变动,重启服务。我是用pm2 watch也可以做到,不过我想做到的是不重启服务的情况下,更新配置文件。

M
MiguelValentine#3·11 年前

监控stdin 接受一个update的信号。自动重新require ==>如果监听了log或者打印很多的话,不知道有没有冲突

M
MiguelValentine#4·11 年前

不要问太多问题,在控制台直接输入update回车即可

var readable = process.stdin;
readable.on('data', function(chunk) {
    var common = (chunk.toString()).substr(0,(chunk.toString()).length-1);
	if(common=='update'){
		delete require.cache[require.resolve('./message')];
		Message = require('./message');
	}
});
J
jerrywu55#5·11 年前
引用 MiguelValentine不要问太多问题,在控制台直接输入update回车即可

@MiguelValentine 重新require 没有效果的,require过一次后,以后require都是从cache中取

H
hezedu#6·11 年前
C
captainblue2013#8·11 年前
引用 MiguelValentine@jerrywu55 我补了一句

@MiguelValentine 窝一般给那个模块价格update的方法,call一下就是了,不用重新require

H
haozxuan#10·11 年前
引用 MiguelValentine不要问太多问题,在控制台直接输入update回车即可

@MiguelValentine 删除缓存做法应该是最简单的了。我目前使用的是 untitled3.png 这种应该是比较low的。

另外想请教下,针对于同一份js文件,多个服务进程调用他,想对这个js更新配置参数,除了每个服务器进程都进行一次update操作外,还有其他好的办法吗?

H
haozxuan#11·11 年前
引用 jerrywu55@MiguelValentine 重新require 没有效果的,require过一次后,以后require都是从cache中取

@jerrywu55 正常情况下的确require多次和一次效果是一样的,但如果delete require.cache[require.resolve('./message')];这样的话就可以将单个模块从缓存中删除。

H
haozxuan#12·11 年前
引用 hezedu楼主可以参考下 hotstart https://cnodejs.org/topic/555c72e4e684c4c8088a0ccd

@hezedu 恩,看了下。目前仅仅是想做配置参数的动态变更,应该还用不到那么多。

C
chita#13·11 年前

其实“配置”的 意思就是 一次运行不会随意变动的部分。

H
haozxuan#14·11 年前
引用 chita其实“配置”的 意思就是 一次运行不会随意变动的部分。

@chita 或许我描述的不是很清楚,你可以理解为我在做一个游戏的掉宝概率,如果策划想开活动我就需要动态的更改,这里并不是指数据库等硬性的参数配置,所以在不重启服务的情况下更新还是很有必要的。

H
haozxuan#15·11 年前
引用 i5tinghttps://cnodejs.org/topic/553723e548636414313a7398

@i5ting 恩,看了下,需求实现还不错,只是感觉不太合适。逻辑简单的情况下还是避免引入过多而第三方包的好。

参与回复
登录后即可参与回复。登录