node.js中的长时间运算

我在node.js中写了一个游戏服务器,有些操作涉及到部分服务器的大量计算。 我不想在运行这些计算时停止接受连接 – 当node.js不支持线程时,如何在后台运行它们?

我个人不能担保其中的任何一个,但是如果你在做进程中的工作,那么已经有一些独立的节点WebWorkers API实现,如节点模块页面所列:

乍看之下,第二个看起来更成熟了,而且这两个都可以让你基本上做线程编程,但它基本上是actor模型,所有这些都是通过消息传递完成的,而且你不能共享数据结构或任何东西。

另外,值得一提的是,node.js团队打算直接在本地实现这个API,所以这些工具即使不完美,也可能是一个体面的权宜之计。

var spawn = require('child_process').spawn; listorwhatev = spawn('ls', ['-lh', '/usr']);//or whatever server action you need //then you can attach events to that list like this listorwhatev.on('exit', function(code){}); ///or in this ls example as it streams info listorwhatev.stdout.on('data', function(info){sys.puts(info);}); 

确保每个应用程序都会产生一次产卵过程,然后将数据提供给它并观察每个连接的事件。 在处理之前,你还应该检查listorwhatev是否还在运行。 因为我们都喜欢节点崩溃应用程序中的那些未被捕获的错误,所以我们不会;)当你的机器上有一个杀死或者不好的事情发生时,spawn(pid)被退出,并且你没有优雅的退出你的代码中的产卵,stream事件处理程序将崩溃你的应用程序

部分操作涉及到部分服务器的繁重计算

你是如何编写计算量大的代码的呢? 这在node.js中很难做到。

当node.js不支持线程时,如何在后台运行它们

你可以派生一些工人(节点)实例,并使用例如redis阻塞popup窗口与接受连接(节点实例)进行通信。 Node.js的redis库是没有阻塞的。