gpt4 book ai didi

node.js - 仅在 NodeJs 上构建网站,并且 Express 阻止通过 http 的请求

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:09 24 4
gpt4 key购买 nike

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

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

这些被认为是 NodeJs 的初学者指南。我的问题是这样一个事实:如果我有 10 个用户同时访问同一接口(interface)并执行相同的操作,NodeJs 肯定会阻止其他用户的请求,因为它们在同一端口上运行。

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

我在这个问题上花了几个月的时间!我目前有一些东西可以执行以下操作:

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

我在这方面取得了一些成功!它确实在一定程度上起作用!我在网上遇到一个问题,由于 IP 地址和 socket.io 玩得很有趣,这使问题变得复杂。

我还有多个使用集群的工作人员。我按以下方式使用它:

  1. 我创建了一个masterworker
  2. 我生成 worker
  3. 我接受任何连接请求并将其传递给相关工作人员。

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

正如你所看到的,我为此做了很多工作,但没有得到正确的解决方案!

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

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

我研究、阅读和测试了很多代码 - 这是我第一次在 stackoverflow 上问任何问题!

感谢您的帮助。

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

感谢您花时间阅读!

最佳答案

我很抱歉这么说,但是,是的,你已经环游世界 10 次了,却错过了一些简单的东西。

很明显,您以前对网络服务器的了解/经验是从阻塞的角度来看的,如果是这种情况,那么您的担忧是有道理的。

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

有一些操作可以在 Node 中执行此操作,例如读/写磁盘。但是,大多数 Node 操作都是异步的。

相信大家对这个词很熟悉,我就不多说了。异步操作允许 Node 做的就是尽可能保持这个单线程空闲。我所说的闲置是指可以从事其他工作。如果您的代码是完全异步的,那么处理 4 个并发用户(甚至 400 个)应该不成问题,即使对于单个线程也是如此。

现在,关于您最初的端口问题:一旦在给定端口上收到请求,node.js 就会执行您为其编写的任何代码,直到遇到异步操作为止,一旦发生,就可以在同一端口上接收更多请求。

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

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

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

希望这足以解释它。如果您还有任何疑问,请告诉我:)

关于node.js - 仅在 NodeJs 上构建网站,并且 Express 阻止通过 http 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35886198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com