对于使用Nodejs,Express和Jade模板时的示例,我有一个问题。
所有示例都显示了如何构建某种用户管理界面,您可以在其中添加用户配置文件,删除它们并对其进行管理。
这些被认为是NodeJ的初学者指南。我的问题是,如果我有10个用户同时访问同一个接口并执行相同的操作,那么NodeJs肯定会阻止其他用户在同一端口上运行时的请求。
所以,让我说我正在提取一个类似于10000的用户列表。是的我可以进行分页,但这不是重点。当我从服务器获取列表时,另外4个用户想要访问该应用程序。他们必须等待我的进程结束。这是我的问题 - 如何避免使用NodeJS&表达
我在这个问题上待了几个月!我目前有适当的地方可以做到以下几点:
我在这方面取得了一些成功!它实际上有一定程度的作用!我有一个在线问题,由于IP地址,socket.io播放有趣的问题复杂化。
我也有多个使用群集的工作人员。我用以下方式使用它:
我为主节点请求以及套接字请求执行此操作。就像我说我用2个端口!
正如您所看到的,我已经完成了很多工作,但我没有得到正确的解决方案!
我的问题是这个问题 - 我是否只是因为错过了一些简单的事情而去世界各地10次?这听起来很难实现非阻塞nodejs唯一的网站。
我问自己 - 当然所有这些教程都不会错过这么重要的东西!但他们确实做到了!
我已经研究,阅读并测试了很多代码 - 这是我第一次在stackoverflow上提出任何问题!
感谢您的帮助。
P.S。同一方法的一个例子是:我使用jasper请求报告,我传递参数,并且如上所述使用“延迟ajax响应”方法我只是释放端口,并且在后台生成非常密集的报告(这可能是一个非常密集的过程,因为正在进行大量的计算)..!我真的没有看到更好的方法 - 任何帮助都将受到超级赞赏!
感谢您抽出宝贵时间阅读!
答案 0 :(得分:1)
我很抱歉地说出来,但是,你曾经去世界各地10次,只是因为错过了一些简单的东西。
很明显,您以前的网络服务器知识/经验来自阻止的观点,如果是这种情况,您的担忧是有效的。
Node.js是一个专注于使用单个线程来执行代码的框架,这意味着如果它执行任何阻塞操作,其他任何人都无法完成任何操作。
有些操作可以在节点中执行此操作,例如读取/写入磁盘。但是,大多数节点操作都是异步的。
我相信你熟悉这个词,所以我不会详细说明。异步操作允许节点执行的操作是尽可能地保持此单线程空闲。闲置我的意思是开放其他工作。如果您的代码是完全异步的,那么处理4个并发用户(甚至400个)不应该成为问题,即使对于单个线程也是如此。
现在,关于端口的初始问题:一旦在给定端口上收到请求,node.js就会执行你为它编写的任何代码,直到它遇到异步操作,一旦发生,它就是可以在同一个端口上接收更多请求。
您询问的第二个问题是数据库操作。在这种情况下,node-js会将查询发送到数据库(根本不需要时间),数据库会执行查询的实际执行。与此同时,节点可以自由地做任何想做的事情,直到数据库完成,并让节点知道有结果要提取。
您可以通过其结构识别异步操作:my_function(...,...,callback)。使用回调函数的函数在大多数情况下都是异步函数。
所以底线:不要担心阻塞IO的问题,因为你几乎不会遇到任何节点。如果需要,可以使用单个端口(通过创建多个子进程,您甚至可以在同一端口上拥有多个节点实例)。
希望这能解释得足够好。如果您有任何其他问题,请告诉我:))