仅在NodeJs上构build网站,在http上构buildExpress阻止请求

在使用Nodejs,Express和Jade模板时,我有一个关于这个例子的问题。

所有示例都显示了如何构build某种用户pipe理界面,您可以在其中添加用户configuration文件,将其删除并进行pipe理。

这些被认为是NodeJ的初学者指南。 我的问题是,如果我有10个用户同时访问相同的接口并执行相同的操作,那么NodeJs将会阻止其他用户在同一个端口上运行的请求。

所以我们假设我正在抽出一个可能类似10000的用户列表。是的,我可以做分页,但这不是重点。 当我从服务器获得列表时,另外4个用户想要访问应用程序。 他们必须等待我的过程结束。 这是我的问题 – 如何避免使用NodeJS&Express?

我在这个问题上好几个月了! 我目前有一些地方做到以下几点:

  1. 运行一个端口上的东西的主要处理
  2. 在另一个端口上运行一个Socket.io进程
  3. 使用粘性会话
  4. 这个想法是,我做了一个请求(如获取项目列表),并立即响应一些请求引用,但没有请求的项目,从而释放端口。
  5. 在“asynchronous”的背景下,我做了获取物品的过程。 完成后,我做一个HTTP请求从一个节点到套接字节点端口节点发送通过的项目。
  6. 当这样做,然后执行一个socket.io与数据和初始请求引用发出,以便正确的用户获取消息。
  7. 在客户端,我有一个事件监听socket,然后通过填充列表完成ajax请求。

我在这方面取得了一些成功! 它实际上在一定程度上工作! 我有一个在线问题,由于IP地址,使socket.io玩起来很有趣。

我也有多个使用集群的工人。 我以如下方式使用它:

  1. 我创build一个主人
  2. 我产卵了工人
  3. 我接受任何连接请求并将其传递给相关的工作人员。

我为主节点请求以及套接字请求执行此操作。 就像我说的我使用2个端口!

正如你所看到的,我已经完成了很多工作,而且我没有得到一个合适的解决scheme!

我的问题是这个 – 我走遍了世界各地10次,只是错过了一些简单的东西? 这听起来很复杂,以实现一个非阻塞nodejs唯一的网站。

我问自己 – 当然,所有这些教程都不会错过这样重要的事情! 但他们做到了!

我已经研究,阅读和testing了很多代码 – 这是我第一次在stackoverflow上询问任何东西。

谢谢你的帮助。

PS一个同样的方法的例子是这样的:我要求使用jasper的报告,我传递参数,并与上述的“延迟ajax响应”方法,我只是释放端口,并在后台生成一个非常密集的报告(这可以是非常密集的过程,因为大量的计算正在执行)..! 我真的没有看到更好的方法 – 任何帮助将超级赞赏!

感谢您花时间阅读!

我很抱歉地说,但是,是的,你已经环游世界10次,只是为了失去一些简单的东西。

很显然,您之前对networking服务器的知识/经验来自阻塞的观点,如果是这样的话,您的担心是有效的。

Node.js是一个专注于使用单个线程来执行代码的框架,这意味着如果它执行了任何阻塞操作,其他任何人都无法完成任何操作。

有一些操作可以在节点中执行此操作,如读取/写入磁盘。 但是,大多数节点操作将是asynchronous的。

我相信你对这个词很熟悉,所以我不会详谈。 asynchronous操作允许节点执行的操作是尽可能地保持单线程空闲。 闲置我的意思是开放的其他工作。 如果你的代码是完全asynchronous的,那么处理4个并发用户(甚至400)应该不成问题,即使对于单个线程也是如此。

现在,关于你最初的端口问题:一旦在一个给定的端口上接收到一个请求,node.js就会执行你为它写的任何代码,直到遇到asynchronous操作,它就可以在同一个端口上接收更多的请求。

你询问的第二个问题是数据库操作。 在这种情况下,node-js会将查询发送到数据库(根本不需要任何时间),数据库会执行查询的实际执行。 同时,节点可以自由地做任何事情,直到数据库完成,并让节点知道有一个结果要取。

您可以通过其结构识别asynchronous操作:my_function(…,…,callback)。 使用callback函数的函数在大多数情况下是asynchronous的。

所以底线:不要担心有关阻塞IO的问题,因为你几乎不会遇到任何节点。 如果需要,使用单个端口(通过创build多个subprocess,甚至可以在同一个端口上有多个节点实例)。

希望这个解释足够好。 如果您还有其他问题,请告诉我:)