2

我正在使用 iisnode 运行我的 node.js 应用程序。但是,大约一个小时后,node.exe 进程停止运行(我需要它运行,因为我有一个 setInterval() 方法,每隔几秒从数据库中提取数据)。有什么建议吗?

另外,如果我使用 process.env.PORT 设置服务器,如何在客户端使用 socket.io 连接到它?我明白我必须使用

io.configure(function () { 
    io.set("transports", ["xhr-polling"]); // no websockets
    io.set("polling duration", 10); 
    io.set("log level", 1); // no debug msg
});
4

1 回答 1

5

当应用程序使用 iisnode 托管在 IIS 中时,这是 socket.io 的正确配置。在客户端,您使用 IIS 公开的端点的常规 HTTP 地址连接到服务器。请注意,为了让 socket.io 开箱即用,您需要将 node.js 应用程序托管为 IIS 网站,而不是网站中的虚拟目录:您的应用程序应该可以使用http://foobar 进行寻址。 com/而不是http://foobar.com/myapp/

当您说 node.exe 进程停止运行时,您的意思是它已终止并消失或挂起吗?IIS 将在一段时间不活动后(当没有以该服务器为目标的 HTTP 请求到达时)终止工作进程(包括它们产生的任何子进程,在本例中为 node.exe)。该时间段的持续时间可在应用程序池设置中配置。

如果您依赖于应用程序中的逻辑,需要定期运行代码,则 IIS 本身不提供最佳托管模型,因为进程生命周期与 HTTP 消息传递密切相关。你真的需要一个持久的服务器(例如 Windows 服务,查看http://nssm.cc/),或者某种形式的 web cron。

于 2012-09-06T16:51:04.403 回答