node.js在客户端中的位置< - >网络服务器流程?

时间:2011-01-25 20:12:14

标签: javascript asynchronous node.js serverside-javascript evented-io

关于node.js如何适应客户端和Web服务器,我的描述是否正确?

  • (A)是客户
  • (B)是在某个Web服务器上运行的node.js
  • (C)是托管业务逻辑,数据库访问例程的“服务”,例如, “GETCUSTOMER()”。为简单起见,假设服务(C)公开REST接口。

因此,在流程中,客户端(A)将从node.js(B)请求一些资源,而该资源又将此请求(具有所有异步和事件的i / o优点)分派给服务(C),可能会获取一些客户信息并通过回调将其返回到node.js(B),然后node.js将该响应返回给客户端。

1.这是对的吗?

两个相关问题:

2. node.js如何知道将请求分派给哪个服务?你是否必须在node.js中创建镜像服务API的api“stubs”,因为客户端不直接与服务对话?

3.如何在此架构中处理会话状态?

2 个答案:

答案 0 :(得分:7)

首先是通常流程的“图表”:

     Client                                
       |                                    
       v                                    
     Request                               
       |                                  
       v                                                          
(load balancer e.g. nginx)                
       |                                  
       v                                    
 Node.js Instance                          
 |     |      |                             
 v     v      V                            
DB    APIS   FILES                         

关于你的最后两个问题:

  1. 您希望它如何知道? Node.js是一个通用框架,您必须编写代码来处理这个问题。

  2. 同样,Node.js是完全通用的。如果您只有一个实例,则可以在内存中执行此操作。否则你可能会使用redis之类的东西。

  3. 您可以在Node.js中编写游戏服务器,只需处理数字,或编写Web服务器。

    但你不必这样做,按你喜欢的方式去做,或者搜索一个按你喜欢的方式做到的框架。

答案 1 :(得分:2)

Node.js是一个用于在javascript中编写不在Web浏览器中运行的应用程序的框架。由于它的异构性,它恰好擅长编写Web服务。对于(B)Node.js是网络服务器,它不在网络服务器(apache)内运行。对于(C)您的所有逻辑都可以在您的Node.js应用程序中,或者您的Node.js应用程序可以与其他服务进行通信以获取数据。这完全取决于你。

对于2,你可以随心所欲地做到这一点。您正在编写代码,按照您的应用程序中有意义的方式执行。

对于3,状态由传递给回调的会话/连接对象处理。