Car*_*s00 2 javascript python node.js
我们正在考虑node.js作为一个网络平台.但我有一个关键问题,因为我认为我没有得到以下架构node.js:
看起来默认情况下你被迫使用他们的自定义HTTP服务器,没有WSGI或任何东西?!
看起来当在响应中做一些"真正的计算"(不仅仅是一些I/O)时,所有的基础设施都搞砸了并且ab -n ... -c ...每个请求返回了很多次,比如Python - Pyramid/Flask或者其他什么?!
那么,作者node.js假设我们只做I/O或者我错过了一些非常基本的东西?
Dom*_*nic 14
你自相矛盾:"默认情况下"和"强制"是不兼容的.您可以使用任何您想要的HTTP库.核心http模块可能被认为是"默认",但没有什么能阻止您使用其他模块.
JavaScript是一种单线程语言,Node.js是一个JavaScript运行时,而不是像许多其他人一样产生每个响应的线程的Web服务器.如果需要,您仍然可以为每个响应执行一个线程,并且有一些基于Node构建的项目可以执行此操作,但是您将失去Node的大部分好处.如果你正在做一些计算繁重的事情以响应web请求(并且你有客户愿意等你去做),你应该通过许多可用的解决方案(web worker,threads)分离一个单独的线程-a-go-go,child_process等).
Node.js的作者假设您正在编写Web服务器.您在Web服务器中执行的大多数操作本质上都是IO,无论IO是涉及文件系统,数据库,还是用于在其他工作室进程上排队计算密集型任务的消息总线.
回顾一下你的问题,如果你试图将它与Python和WSGI集成,你似乎对Node.js有一个基本的误解.Node.js用于编写Web服务器,因此尝试使用它...以及Python?在Python里面?(我真的不确定你想要完成什么)没有多大意义.
如果您的任务不仅受I/O限制,您可能不应该将这些任务托管在与Web服务器相同的框中.因此,消息总线方法在3中简要提到.但是如果您决定这样做,并确保这些任务不会占用所有CPU,那么您应该确定此类任务的频繁发生频率.如果它们出现在每个Web请求中,则不应使用Node.js; 你放弃了它最基本的优势,只留下较小的优势(就像在它周围长大的生态系统).如果它们很少见,那么你应该通过2中的许多方法在不同的线程中将它们分开.
相关:https://gist.github.com/2794861