我正在用node.js编写游戏服务器,并且某些操作涉及服务器一部分的大量计算。我不想在运行这些计算时停止接受连接 - 当Node.js不支持线程时,如何在后台运行它们?

有帮助吗?

解决方案

我个人都不能保证这两个,但是如果您在进行过程中进行工作,那么在节点模块页面上列出了网络工作人员API的几个独立实现:

  • http://github.com/cramforce/node-worker
  • http://github.com/pgriess/node-webworker

乍一看,第二个看起来更成熟,这两个都可以使您从本质上进行螺纹编程,但基本上是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在处理之前是否仍在运行。由于我们都喜欢那些在节点中遇到的未被发现的错误崩溃的应用程序,所以我们不;流活动处理程序将使您的应用崩溃。

某些操作涉及服务器一部分的大量计算

您是如何首先编写计算重量的代码。在Node.js中很难做到这一点。

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

您可以产生几个工人(节点)实例,并使用例如REDIS阻止POP与接受连接(节点实例)进行通信。 node.js redis库没有阻止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top