SEARCH
网站建设|网站制作|网站设计—苏州企桥网络科技有限公司

Internet Develppment互联网开发&推广服务提供商

Search

与我们合作

我们专注:网站策划设计、网络多媒体传播、网站优化及网站营销、品牌策略与设计
主营业务:网站建设、移动端微信小程序开发、VI设计、网络运营、云产品·运维解决方案

有一个品牌项目想和我们谈谈吗?

您可以填写右边的表格,让我们了解您的项目需求,这是一个良好的开始,我们将会尽快与您取得联系。当然也欢迎您给我们写信或是打电话,让我们听到您的声音

您也可通过下列途径与我们取得联系:

地 址:苏州吴中区东环路999号正基大厦A座

电 话:0512-65982570

手 机:189-1350-2096

网 址:http://www.szqiqiao.com

邮 箱:hsw@szqiqiao.com

快速提交您的需求 ↓

点击更新验证码

做网站技术之Node.js 究竟是什么?

发布日期:2018/7/17 15:14:34

    如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?” 即便是在参阅 Node 的主页之后,您甚至可能还是 不明白 Node 为何物?Node 肯定不适合每个程序员,但它可能是某些程序员一直苦苦追寻的东西。


    为试图解释什么是 Node.js,本文将简要介绍一些背景信息:它要解决的问题,它如何工作,如何运行一个简单应用程序,最后,Node 在什么情况下是一个好的解决方案。本文不涉及如何编写一个复杂的 Node 应用程序,也不是一份全面的 Node 教程。阅读本文应该有助于您决定是否应该继续学习 Node,以便将其用于您的业务。


    Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。


    Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。


    现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。


网站最主要的功能是发布消息,但这个消息不是永久保存了,而且保存的时间不会太长,预计消息的长度也不会太长,因此使用 redis 来存储是比较合适。


由于对后端数据库这一块还不太熟悉,目前也就对 PostgreSQL 用得多点,因此在存储用户的注册信息这一块就选择了 PostgreSQL。


登录这一块打算使用 JWT 来做,因此无需保存用户状态到 PostgreSQL 数据库中,这样可以减少对数据库的操作。


后端选用 Node.js + koa + koa-router,另外由于现在 async/await 已经正式进入 ES2017 了,就打算使用 async/await 优化异步代码的结构。


前端准备做成单页应用,于是选用 preact + redux + redux-thunk。


前端的代码通过 webpack 打包,而后端的代码通过 rollup 打包(选用 rollup 打包是由于 Node.js 6+ 已经基本支持 ES2015 了,这里只需要将各个模块打包在一起,顺便把 async/await 转换成 Node.js 可以运行的代码就可以了,而这个工作非常合适 rollup 来做)。


GO 欣赏案例
查看经典案例

TOP

QQ客服

QQ客服 免费电话
获取报价
您的称呼:

*

您的电话:

*

您的邮箱:

*

提交 重置