小编Hec*_*rea的帖子

事件驱动与非事件驱动的Web服务器中的线程

以下两个图表是我对事件驱动的Web服务器(如Node.js + JavaScript)与非事件驱动的Web服务器(如IIS + C#)相比如何工作的理解

传统(非事件驱动)Web服务器

在此输入图像描述

从图中可以很容易地看出,在传统的Web服务器上,用于执行3次长时间运行操作的线程数大于事件驱动的Web服务器上的线程数(3 vs 1)

我认为我的"传统网络服务器"计数正确(3),但我想知道事件驱动的(1).这是我的问题:

  1. 假设在事件驱动的场景中只使用了一个线程,这是正确的吗?这可能不正确,必须创建一些东西来处理I/O任务.对?

  2. 事件服务器是如何处理I/O的?假设I/O是从数据库中读取的.我怀疑Web服务器必须创建一个线程来交接连接数据库的工作?对?

  3. 如果事件驱动的Web服务器确实创建了处理I/O的线程,那么增益是多少?

  4. 我混淆的一个可能的解释可能是,在传统和事件驱动的两种情况下,确实创建了三个单独的线程来处理I/O(图中未显示),但区别在于它上的线程数量. Web服务器本身,而不是I/O线程.那是准确的吗?

node.js

9
推荐指数
1
解决办法
3461
查看次数

node.js readfile问题

下面的代码创建一个文本文件,然后读取它,覆盖它,然后再次读取它.除了创建文件之外,还使用Node.js async readFile和writeFile执行三个I/O操作.

我不明白为什么第一次读取没有返回错误没有数据.此代码的输出是:

  • 开始...
  • 完成.
  • 先读取返回的EMPTY数据!
  • 写完了OK
  • 第二次读取返回数据:更新文本

即使操作是以任意顺序发生的(由于它们的异步性质),我也不希望得到一个"空数据"对象.

任何想法为什么我在读取文件时得到一个空数据(没有错误)?

我有什么办法可以确保读取文件内容吗?

var fs = require('fs');
var fileName = __dirname + '/test.txt';

// Create the test file (this is sync on purpose)
fs.writeFileSync(fileName, 'initial test text', 'utf8');


console.log("Starting...");

// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
    var msg = "";
    if(err)
        console.log("first read returned error: ", err);
    else {
        if (data === null) 
            console.log("first read returned NULL data!");
        else if (data === "") 
            console.log("first …
Run Code Online (Sandbox Code Playgroud)

node.js

7
推荐指数
1
解决办法
7382
查看次数

mongoDB承诺过早返回

我刚开始尝试在我的Node.js应用程序上实现Promises.现在我正在检查用户和密码是否存在,然后使用mongodb查找它们如果找不到用户它设置了promise.reject()但是它过早地返回了promise并且它仍处于挂起状态.如果有人可以帮助或给我关于如何重构的想法,将不胜感激.

https://gist.github.com/joshbedo/8957056

mongodb node.js promise

2
推荐指数
1
解决办法
3131
查看次数

标签 统计

node.js ×3

mongodb ×1

promise ×1