• 请不要在回答技术问题时复制粘贴 AI 生成的内容
a251922581
V2EX  ›  程序员

nodejs 作为一门相对年轻的语言, Web 类生产环境的稳定性和部署高可用方案的如何?

  •  
  •   a251922581 · Nov 1, 2017 · 6088 views
    This topic created in 3299 days ago, the information mentioned may be changed or developed.
    用过一些开源的 nodejs 项目,Web 服务类的,运行中途抛出了一个未捕获的错误,然后就报错退出了。。这样 Web 服务就挂掉了。。这是作者没处理好错误捕获的原因吗?
    谢过几段全程 try catch 的代码,但测试时还是出现了未捕获错误,记得是跟 socket 相关的,ECONNREFUSED 和 Socket Hangup
    另:用 Nginx 反代 Web 类 nodejs 程序的端口有什么好处?
    谢过。。
    28 replies  •  2017-11-02 09:56:54 +08:00
    mooncakejs
    mooncakejs
    Nov 1, 2017
    1
    pm-docker, 捕获未捕获的异常可以用 socket.on('error'),也可以在 process.on()
    反代 nodejs 除了包一层 https,静态文件,负载均衡, 没啥好处
    janxin
    janxin
    Nov 1, 2017
    2
    参考其他语言方案即可
    hronro
    hronro
    Nov 1, 2017
    3
    可以用 pm2
    pigzilla
    pigzilla
    Nov 1, 2017❤️1
    4
    try catch 只能捕获同步代码部分的问题,异步代码要按异步的风格处理,比如 on('error')之类的,或者 promose 的.catch()。
    chairuosen
    chairuosen
    Nov 1, 2017
    5
    pm2
    youxiachai
    youxiachai
    Nov 1, 2017
    6
    反代..可以跑好几个不同端口的 nodejs 程序啊...
    otakustay
    otakustay
    Nov 1, 2017❤️5
    7
    终于,nodejs 成了语言
    libook
    libook
    Nov 1, 2017❤️1
    8
    公司使用 Node.js 三年多了,用户量在千万级别,稳定性和 Java 等其他语言没啥区别,瓶颈在写程序的人,如果人的技术不够扎实或者习惯不够好,服务就会经常出问题。
    Node.js 技术栈是异步思维为主,和很多同步思维的程序和框架不同,建议不要用其他技术栈的思维来做 Node.js 项目,费力不讨好。
    Nginx 反向代理是否有好处要看具体需求,旨在通过利用 Nginx 的特性来使用 Node.js 的长处来弥补其短处。比如去状态化的 API 设计加 Nginx 负载均衡再加多 Node.js 实例来饱和硬件利用率;又比如用 Nginx 来管理静态文件,同时代理 Node.js 的动态 API,能充分利用 Nginx 对静态文件服务的优化来提升整体网站的速度;再如一台服务器上绑定多个域名指向多个不同的 Node.js 微服务,Nginx 可以做域名和 location 的路由。
    libook
    libook
    Nov 1, 2017
    9
    @otakustay 如果 Oracle Java 和 OpenJDK Java 因为特性有区别算是两种语言的话,我个人觉得说 Node.js 是一种语言也算勉强成立,毕竟 Node.js ECMA Script 和 Babel ECMA Script 虽说都是 ECMA Script 的实现但多多少少还是有些区别的。
    whypool
    whypool
    Nov 1, 2017
    10
    难点在异常捕获,由于是异步回调,如果出异常简单暴力就是 process.exit(1),所以直接就挂了
    my3157
    my3157
    Nov 1, 2017
    11
    nginx + pm2
    iceheart
    iceheart
    Nov 1, 2017 via Android
    12
    还没开始选型的话,就别选 nodejs 了.
    server 端推荐 golang.
    做过简单测试,同样功能的程序,go 语言的内存占用大概是 node 的 1/3,处理并发数要比 node 高得多。
    并且,代码逻辑也比 node 清晰,部署维护也比 node 简单。
    S23VqeW93WZLlm6s
    S23VqeW93WZLlm6s
    Nov 1, 2017 via iPhone
    13
    @iceheart
    可惜社区和第三方库是硬伤
    learnshare
    learnshare
    Nov 1, 2017
    14
    Node.js 应该算是 JavaScript 运行环境吧
    wxt
    wxt
    Nov 1, 2017 via Android
    15
    坑多,一个合作伙伴整个前端模块化,好几十个 node 应用部署在一台机器上,出了问题,他们每次都要找研发。
    wwdyy
    wwdyy
    Nov 1, 2017
    16
    node 不是语言,谢谢
    shuangguanQuail
    shuangguanQuail
    Nov 1, 2017
    17
    process.on('uncaughtException'),相当于一个全局的异常捕获器,保证你的程序不挂掉。
    a251922581
    a251922581
    OP
    Nov 1, 2017
    18
    @iceheart golang 是不是相对和 C 语言接近一点?学起来比 nodejs 要难一些吧..
    isbase
    isbase
    Nov 1, 2017
    19
    先定义好一个兜底的错误处理中间件,将捕获到的错误传给它
    iceheart
    iceheart
    Nov 1, 2017 via Android
    20
    @a251922581 golang 很容易上手,比 c 还简单,网上看两天文档就差不多能开搞了。官方的基础库也够用,go 的协程很方便。
    bramblex
    bramblex
    Nov 1, 2017
    21
    @iceheart

    只可惜写起来跟 c 一样难受
    lianyue
    lianyue
    Nov 1, 2017 via iPhone
    22
    es6 可以直接 捕获 异步代码 async await 多用 就好了 用 koa 做 http 服务器
    shiny
    shiny
    Nov 1, 2017
    23
    阿里 eggjs 框架值得参考,比如你说的异常处理问题在框架层面的处理 https://eggjs.org/zh-cn/core/error-handling.html
    vance
    vance
    Nov 1, 2017
    24
    nazor
    nazor
    Nov 1, 2017
    25
    第一次看见写 JS 的来吐槽 Go 难写。

    吃惯屎的,偶然吃一下饭肯定会不适应。
    to2false
    to2false
    Nov 2, 2017
    26
    @nazor 头像厉害了
    Erskine
    Erskine
    Nov 2, 2017 via Android
    27
    js 用在服务端还是难受,不知道为什么,可能 js 本身就没有想的那么好吧
    looplj
    looplj
    Nov 2, 2017
    28
    不推荐 Node,Go 更好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1217 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 17:44 · PVG 01:44 · LAX 09:44 · JFK 12:44
    ♥ Do have faith in what you're doing.