繁体   English   中英

仅在NodeJs和Express上通过http阻止请求构建网站

[英]Building Websites only on NodeJs and Express blocking requests over http

我对使用Nodejs,Express和Jade作为模板时的示例有疑问。

所有示例都展示了如何构建某种用户管理界面,您可以在其中添加,删除和管理用户配置文件。

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

因此,假设我要提取的用户列表可能类似于10000。是的,我可以进行分页,但这不是重点。 当我从服务器获取列表时,另外4个用户想要访问该应用程序。 他们必须等待我的过程结束。 这就是我的问题-如何使用NodeJS&Express避免这种情况?

我在这个问题上待了几个月! 我目前有一些可以执行以下操作的内容:

  1. 在端口上运行物料的主要处理
  2. 在其他端口上运行Socket.io进程
  3. 使用粘性会话
  4. 我的想法是我执行一个请求(例如获取项目列表),并立即以一些请求引用进行响应,但没有被请求的项目,因此释放了端口。
  5. 然后在后台“异步”执行获取项目的过程。 完成后,我从一个节点向套接字节点端口节点发出Http请求,以通过这些端口发送项。
  6. 完成后,我然后执行一个socket.io发出数据和初始请求引用,以便正确的用户获取消息。
  7. 在客户端,我有一个事件监听套接字,然后通过填充列表来完成ajax请求。

我在此方面取得了一些成功! 它实际上在一定程度上有效! 我在线上有个问题,由于IP地址和socket.io玩得很滑稽,这使事情变得更加复杂。

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

  1. 我创建一个主工人
  2. 我催生工人
  3. 我接受任何连接请求,并将其传递给相关的工作人员。

我对主节点请求和套接字请求都这样做。 就像我说的我使用2个端口!

如您所见,我为此做了很多工作,而我却没有找到合适的解决方案!

我的问题是-我是否曾环游世界10次而错过了一些简单的事情? 这听起来很复杂,以实现一个非阻塞的nodejs only网站。

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

我已经研究,阅读和测试了很多代码-这是我第一次对stackoverflow提出任何问题!

感谢您的协助。

PS相同方法的一个示例是:我使用jasper请求报告,传递参数,并使用如上所述的“延迟ajax响应”方法,我只是释放了端口,并且在后台生成了非常密集的报告(这可能是一个非常密集的过程,因为正在执行大量计算)。 我真的没有更好的方法-任何帮助将不胜感激!

感谢您抽出宝贵的时间阅读!

我很遗憾地说,但是,是的,您已经走遍了世界十次,而只是错过了一些简单的东西。

显然,您以前对Web服务器的了解/经验是从阻塞的角度来看的,如果是这种情况,则您的担忧是正确的。

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

节点中可以执行某些操作,例如读/写磁盘。 但是,大多数节点操作将是异步的。

我相信您对这个词很熟悉,因此我不会赘述。 异步操作允许节点执行的操作是,尽可能使此单个线程保持空闲状态。 闲置是指愿意从事其他工作。 如果您的代码是完全异步的,那么即使对于单个线程,处理4个并发用户(甚至400个)也不应该成为问题。

现在,关于您最初的端口问题:在给定端口上收到请求后,node.js将执行您为该端口编写的任何代码,直到它遇到异步操作后,即可用于在同一端口上接收更多请求。

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

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

因此,最重要的是:不要担心阻塞IO的问题,因为您几乎不会遇到任何in节点。 如果需要,请使用单个端口(通过创建多个子进程,您甚至可以在同一端口上具有多个节点实例)。

希望这足以说明问题。 如果您还有其他问题,请告诉我:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM