Node.js的方法是事件驱动的,我想知道你将如何解决何时发生事件的问题?如何开发node.js运行时策略?
比方说,我们有一个Web应用程序的一些操作:创建一些数据,服务页面,
你会如何铺陈这些事件的接收数据等?在一个螺纹系统中,设计相当“简单”。您将线程专用于特定的一组任务,并沿着线程同步的方向前进。尽管这些任务处于低需求状态,但线程却处于空闲状态,什么也不做。当他们需要时,他们运行他们的代码。虽然这条道路存在问题,但它有很好的文件记录和解决方法。
我发现很难绕过node.js事件处理方式。 我有10个请求进来,但我没有创建任何数据,所以我不能任何服务,创建数据是一个长期的行动,另外5个客户端想发送数据。现在怎么办?
UPDATE: 在试图环绕这个问题我已经创建了下面的代码我的头,这是未经测试却又如此裸露与我在这里。该代码基本上是一堆回调,它们被注册并且应该被执行。将会有某种桩管理器可以运行并决定现在要执行的代码。该回调创建的所有回调都可以“自然”添加到偶数循环中。它也应该注册它自己,所以事件循环可以将控制权交还给它。其他内容如静态内容和可以以不同方式绑定的内容。
- 如何在当前事件循环状态下注册回调为最后一个回调?
- 这是解决此问题的好方法吗?
正确答案:
选择的答案是最正确的,只有一个小的代码变化,那就是:
变化从这个这个功能:
getDetail : function (id, callback) {
var data = makeMyData(id);
callback(data)
}
至:
getDetail : function (id, callback) {
var data = makeMyData(id);
setTimeout(callback,0,data);
}
因此,因为您注册了一个回调函数,并且不从函数返回值,所以实际上让事件循环处理它?不回调(数据)现场计算? – qballer 2012-08-09 14:15:03
你是正确的回调(数据)会被当场调用,这是我害怕的一个坏例子。如果您正在执行冗长的I/O操作,则最好使用事件发射器。一旦I/O或数据生成操作完成,它就会发出一个完整的事件,其中可以包含填充数据的回调。 有关事件发射器的更多信息,请参阅[链接](http://nodejs.org/api/events.html) – 2012-08-09 15:10:41
您可以随时重构您的答案。 – qballer 2012-08-09 15:18:26