【问题标题】:Asynchronous I/O , I/O does it include Network request as well?异步 I/O,I/O 是否也包含网络请求?
【发布时间】:2014-07-24 17:00:56
【问题描述】:

我对 node.js 中的异步 I/O 这个词感到困惑

I/O是否只指读/写硬盘操作?

对于第三方服务的 HTTP 请求呢,这是否也算作 I/O 并获得异步 I/O 模型的好处?

从此节点投http://nodecasts.net/episodes/1-introduction-to-nodejs

Node.js 是一个用于编写快速且可扩展的网络应用程序的软件平台。它是事件驱动的并使用非阻塞 I/O。由于它使用非阻塞 I/O,它可以用一个进程处理多个请求。

引用由于它使用非阻塞 I/O,它可以用一个进程处理许多请求。 在我的应用程序中,我将使用 HTTP 请求将内容写入 MQ 服务器的并发性很高,我不确定在此模型中使用 Node.js 是否可以从中受益。

谢谢

【问题讨论】:

  • 是的,网络通信是一种I/O。

标签: node.js concurrency io


【解决方案1】:

基本上是各种 I/O:文件、网络、子进程(及其输入/输出流)等。

因此,网络 I/O 将包括诸如 UDP 发送/接收和 TCP 连接之类的内容,以及在它们之上分层的任何协议,例如 HTTP 请求、SSH 连接、SIP 连接等。

在消息队列服务器的情况下,节点可以查询服务器但在后台等待响应而不会阻塞程序的其余部分。如果您正在并行执行许多消息队列请求,或者您的 HTTP 服务器可以在等待来自消息队列服务器的响应时仍然接受请求,这将特别有用。

【讨论】:

  • 我有一个后续问题,如果我们正在创建一个将接受请求并将某些内容放入 MQ 服务器(以进行进一步操作)的 api,如果使用这种方法,用户可能无法查看对 MQ 服务器的调用是否立即成功? (可能由于网络错误导致失败)
  • 如果您有一个 HTTP 服务器为每个 HTTP 请求发送一个 MQ 请求,那么您可以在响应到来或出现错误(连接级别或 MQ 级别)时响应客户端发生。许多节点模块会在发生错误时发出“错误”事件,因此您可以通过侦听此类事件来轻松响应请求。
【解决方案2】:

异步意味着永远不要等待任何人。因此,无论您是从服务器还是从任何地方获取任何价值,都只需与任何人一起实现这个东西,永远不要等待响应。

您可以在网络事物中实现这一点,NodeJs 非常适合网络类型的事物。

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2011-03-14
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多