问题标签 [evented-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
480425 浏览

javascript - 什么是 Node.js?

我不完全了解Node.js的全部内容。也许是因为我主要是一个基于 Web 的业务应用程序开发人员。它是什么以及它的用途是什么?

到目前为止,我的理解是:

  1. 编程模型是事件驱动的,尤其是它处理I/O的方式。
  2. 它使用JavaScript,解析器是V8
  3. 它可以很容易地用于创建并发服务器应用程序。

我的理解正确吗?如果是,那么事件 I/O 的好处是什么,仅仅是并发的东西更多吗?另外,Node.js 的方向是成为一个框架,比如基于 JavaScript(基于 V8)的编程模型吗?

0 投票
3 回答
7173 浏览

javascript - 如何检查 node.js 中打开的连接数?

我有一台运行 node.js (v0.1.32) 的机器,带有一个 tcp 服务器 (tcp.createServer) 和一个 http 服务器 (http.createServer)。http 服务器受到来自基于彗星的应用程序在端口 80 上的长轮询请求(每个持续 50 秒)的影响。并且出于相同目的,来自 iphone 应用程序的端口 8080 上有 tcp 套接字连接。

发现服务器有一段时间无法处理更多的连接(尤其是tcp连接而http连接看起来很好!!??),只有在重新启动后才正常。

为了对连接进行负载测试,我创建了一个 tcp 服务器并产生了 2000 个请求,并发现在达到机器上的最大文件描述符限制(默认 1024)后连接开始失败。这是一个非常小的数字。

所以,这里有一个新手问题:如何扩展我的应用程序以处理 node.js 上的更多连接以及我如何处理这个问题。

有没有办法找出目前有多少活动连接?

谢谢谢里夫

0 投票
1 回答
333 浏览

node.js - Node.js 提供了无所作为的效率?

我听到一位演讲者将 Node.js 描述为“有效地什么都不做”的网络服务器。我以为这是个玩笑,但其他人似乎点头同意。有人可以解释我对这句话的误解吗?

0 投票
6 回答
1919 浏览

javascript - 除了可扩展性之外,还有哪些使用 node.js 的架构原因?

我读到的关于为什么使用 node.js 的最常见主题是高可扩展性,因为它是事件的、非阻塞 I/O 模型。我正在尝试了解其他不可扩展的用例(除了用作一般的服务器端 javascript 引擎之外)。

  1. 如果我不关心可扩展性,node.js 是否还有其他用例?
  2. 如果#1 是,它们是什么?
  3. node.js 的使用是否适合任何特定类型的应用程序架构?例如,类似于某些键/值(nosql - 呃我讨厌这个术语)数据库除了出于可伸缩性原因之外的用途。
0 投票
2 回答
1039 浏览

javascript - node.js 在客户端 <--> Web 服务器流中位于何处?

关于 node.js 如何适应客户端和 Web 服务器,我下面的描述是否正确?

  • (A) 是客户
  • (B) 是 node.js 在一些 web 服务器上运行
  • (C) 是托管业务逻辑、数据库访问例程的“服务”,例如“GetCustomer()”。为简单起见,假设服务 (C) 公开了一个 REST 接口。

因此,在流程中,客户端 (A) 将从 node.js (B) 请求一些资源,然后将这个请求(所有它是异步和事件 I/O 优点)分派给可能去的服务 (C)获取一些客户信息并通过回调将其返回给 node.js (B),然后 node.js 将响应返回给客户端。

1.这是正确的吗?

两个相关问题:

2.node.js如何知道将请求分派到哪个服务?您是否必须在 node.js 中创建反映服务 API 的 api“存根”,因为客户端不直接与服务对话?

3.这个架构中的会话状态是如何处理的?

0 投票
3 回答
1710 浏览

c - C中是否有任何简单/示例事件驱动的网络服务器?

网上有许多基于线程的 Web 服务器示例,但我还没有真正看到任何可以提供基于事件循环的良好示例的东西(不是很复杂,例如 lighttp 和 nginx)。

有吗?如果没有,我应该阅读/查看什么来帮助我学习如何制作这种服务器?(这包括 C 中的异步 IO 等)

我已经了解了基于事件循环的编程如何工作的基础知识,尤其是在 Python 等高级语言中,但我需要能够用 C 来实现。

0 投票
1 回答
1278 浏览

javascript - Does this Socket.IO code create a blocked connection?

The general rule in writing Node.js code is that all code should be non-blocking and communicate via events. I would like to know if this code written using the Socket.IO library for Node.js create a blocked connection, or does it follow the general Node.js rules?

Would be grateful for any help.

0 投票
2 回答
2495 浏览

node.js - Node.js 事件循环是如何工作的?

在玩过 Node.js 并阅读了很多关于异步 i/o 和事件编程的内容后,我留下了一些问号。

考虑以下(伪)代码:

(我认为)我了解事件循环的基础知识;使用 libev,Node.js 创建了一个事件循环,轮询(epoll/kqueue/...)一堆文件描述符,以查看是否触发了任何事件(新连接、可写、数据可用等)。如果有新请求,事件循环调用传递给 createServer 的匿名函数。我不明白的是之后会发生什么:

1)要同时运行查询,数据库驱动程序必须有某种线程/连接池,对吗?

2)在一个请求的范围内:发送两个查询后会发生什么?无法调用 renderView,因为查询尚未返回。我们如何等待查询返回?它是否应该在继续之前保留待触发的回调计数?我的基本想法是;

onRequest -> 运行异步代码 -> 等待回调 -> 构造响应。在这种情况下,等待将是阻塞的,因此您实际上需要为每个 onRequest 生成一个线程。“在构建响应之前等待回调运行”是如何完成的?

3) db 驱动程序如何通知事件循环它已经完成并且它所具有的回调需要与查询结果一起调用?

4) 事件循环如何在我们使用 onRequest 事件创建的匿名函数中运行回调?这是闭包概念出现在回调函数中“保存”上下文的地方吗?

4) 现在我们有了 db 结果,我们如何继续执行这些renderView/res.write/res.end部分?

0 投票
2 回答
284 浏览

multithreading - 操作系统中的轻量级线程

据说 Node(以及可能的 twisted 等)相对于更传统的线程服务器的主要优点之一是事件循环模型支持的非常高的并发性。最大的原因是每个线程都有很高的内存占用,并且交换上下文相对昂贵。当您有数千个线程时,服务器大部分时间都在线程之间交换。

我的问题是,为什么操作系统或底层硬件不支持更轻量级的线程?如果他们这样做了,你能用普通线程解决 10k 问题吗?如果他们不能,那是为什么呢?

0 投票
2 回答
4027 浏览

ruby-on-rails - 瘦服务器性能不佳/事件 Web 服务器如何工作?

我在 Nginx/Passenger 上有一个 rails 3 应用程序,我刚搬到 Nginx/Thin (1.3.1)。但是,我的应用程序现在明显比在Passenger 上要慢。很多请求也超时。

Thin 是一个事件网络服务器。根据我所读到的有关事件 Web 服务器的内容,它们没有工人的概念。一个“工人”处理一切。因此,如果一个请求正在等待 IO,thin 将继续处理下一个请求,依此类推。我读到的关于事件服务器的一种解释说,事件服务器的性能应该与基于工作者的服务器一样好或更好,因为它们只受系统资源的约束。

但是,我的 CPU 使用率很少。我的内存使用量也很少,也没有太多的 IO 发生。我的应用程序只进行了一些 MySQL 查询。

这里的瓶颈是什么?我的瘦服务器不应该在 CPU 达到 100% 之前处理请求吗?我是否必须在我的应用程序中做任何不同的事情才能让它在事件服务器上表现得更好?