Node.js 到底扮演了什么角色?

本贴最后更新于 2187 天前,其中的信息可能已经时移世改
  1. node 在中途岛模式中的作用和其同构应用中作用有什么区别。
  2. 没有 node.js 作为中间层只是半分离状态吗(非多页面而是纯粹的 spa 应用但不用 node)。
  3. 加入 node 中间层的前后端项目如何分开部署(后端用的 java),部署具体需要那些服务器(Apache,Tomcat,Nginx),各自扮演什么功能(有一个问题 node 是不是在部署中类似 Tomcat 的功能)。
  4. 完全不用 java 后台全部用 node.js 开发是否可以(这种 node.js 的项目需要如何部署运行)
  5. node.js 在中途岛模式中如何与 Java 后端进行信息交互。
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 2 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9923 引用 • 45059 回帖 • 79 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Blackman99 1

    1. node 在中途岛模式中的作用和其同构应用中作用有什么区别。

    • 不知道什么是中途岛模式(我的理解是 Node 作为中台)
    • 同构指的是服务端跟客户端复用一套代码
    • 对于 Node 作为中台,我之前接触过一个项目端到端通信使用的是 OAuth2.0 规范,而且 token 的获取以及存储肯定是不能放在客户端的,所以这个时候我使用 Node 作为管理 token 的工具
    • 对于同构,我个人体会较多的就是前后分离下的为了解决 SEO 以及搜索引擎抓取的问题出现的基于 Node 的服务端渲染解决方案
    • 回归问题,“区别”,都是使用 Node,本质上没有区别,只是为了解决不同的问题提出的不同方案,给每个方案一个名称

    2. 没有 node.js 作为中间层只是半分离状态吗(非多页面而是纯粹的 spa 应用但不用 node)。

    • 不使用 Node,只是构建 SPA 应用也是可以的,这种方式也是前后端分离,这种情况下不利于 SEO 以及浏览器抓取
    • SPA 应用需等待所有 JavaScript 代码加载完毕再进行页面渲染
    • 而使用 Node 作为支持,则可以直接获取页面内容,这里的内容已经包含了 SEO 所需要的内容,然后再使用 AJAX 获取一些页面上的其它数据
    • 我不清楚你说的半分离状态指的是什么

    3. 加入 node 中间层的前后端项目如何分开部署(后端用的 java),部署具体需要那些服务器(Apache,Tomcat,Nginx),各自扮演什么功能(有一个问题 node 是不是在部署中类似 Tomcat 的功能)。

    后端如果是 Java,前端是 SPA 应用

    其实这里我觉得你想怎么部署就怎么部署

    Java 端只是 Restful 接口

    • 一个是 Java 进程
    • 一个是前端项目构建后的 SPA 静态页,SPA 应用直接请求 Java 接口获取数据(存在跨域问题)
    • 这种情况可以选择 Nginx 或者 Apache 作为总的路由控制(也可以不用)

    Java 作为页面渲染以及 Restful 接口

    • 如果你使用了前端路由体系(VueRouter、ReactRouter 等)作为页面路由控制
      这个时候前端项目构建之后的内容作为 Java 项目的模板的一部分,假设你的 SPA 位置是 /page/index.html,需要代理所有 /page/**/* 都为 /page/index.html,Java 的 Restful 接口需要另外一个分支路由,比如 /api/**/*,这个时候没有跨域问题,其实这里可以理解为 Java 版本的服务端渲染
    • 如果你没有使用前端路由体系,而是用 Java 端控制页面路由
      这个时候我觉得已经没有必要使用 SPA 了,因为配合前端路由体系才称得上 SPA
    • 部署可以使用 Apache 或者 Nginx 作为总的路由控制(也可以不使用)

    一端是 Java,另一端是 Node

    注意这里我换了说法,这里已经不是前后端了,因为 Node 完全可以作为 HTTP 服务器,连接数据库什么的,Java 能干的事,Node 都能干
    这里的通信已经成为了端到端的通信,部署至少需要跑两个进程,一个 Java 进程,一个 Node 进程

    Node 是否类似 Tomcat 功能

    Tomcat

    • 官方原话:

    The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies

    • 我的翻译(可能不准确):
      Apache Tomcat(已注册商标)软件是一个 Java Servlet、JavaServer Pages、Java Expression Language 以及 Java WebSocket 等技术的开源实现

    Node

    下面这段话摘自:Node.js 菜鸟教程

    简单的说 Node.js 就是运行在服务端的 JavaScript。
    Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。
    Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。

    从定义上看两者相去甚远

    4. 完全不用 java 后台全部用 node.js 开发是否可以(这种 node.js 的项目需要如何部署运行)

    我曾经比较过 Java 跟 Node 的性能,同等计算强度下,Java 比 Node 快,特别是大量重复计算时,Java 的速度优势非常明显
    但是从语言角度,两者是一样的,任何你想要的功能用 Java 能实现,用 Node 也一定能实现

    • 如何部署
      我还是觉得想怎么部署就怎么部署,我以我曾经部署过的一种方式举个例子:
      Nginx + Node
      Nginx 监听 80 端口,将/foo/**/*所有请求代到 Node 进程下

    5. node.js 在中途岛模式中如何与 Java 后端进行信息交互

    这里我上文中有提到,这里的通信已经是端到端的通信了,这里直接发送 Http 请求就能完成通信,当然如果项目非常大,架构什么的需要纳入考虑,加入中间件也是可以的,比如消息队列什么的

EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 705 关注
  • OnlyOffice
    4 引用 • 24 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 226 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    10 引用 • 15 回帖 • 5 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 177 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 2 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 543 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 1 关注
  • Follow
    4 引用 • 12 回帖 • 5 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 100 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 3 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    947 引用 • 1460 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1281 回帖 • 2 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 1 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 636 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 6 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 16 关注