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

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

  •  
  •   a251922581 · Nov 1, 2017 · 5768 views
    This topic created in 3157 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
        1
    mooncakejs  
       Nov 1, 2017
    pm-docker, 捕获未捕获的异常可以用 socket.on('error'),也可以在 process.on()
    反代 nodejs 除了包一层 https,静态文件,负载均衡, 没啥好处
    janxin
        2
    janxin  
       Nov 1, 2017
    参考其他语言方案即可
    hronro
        3
    hronro  
       Nov 1, 2017
    可以用 pm2
    pigzilla
        4
    pigzilla  
       Nov 1, 2017   ❤️ 1
    try catch 只能捕获同步代码部分的问题,异步代码要按异步的风格处理,比如 on('error')之类的,或者 promose 的.catch()。
    chairuosen
        5
    chairuosen  
       Nov 1, 2017
    pm2
    youxiachai
        6
    youxiachai  
       Nov 1, 2017
    反代..可以跑好几个不同端口的 nodejs 程序啊...
    otakustay
        7
    otakustay  
       Nov 1, 2017   ❤️ 5
    终于,nodejs 成了语言
    libook
        8
    libook  
       Nov 1, 2017   ❤️ 1
    公司使用 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
        9
    libook  
       Nov 1, 2017
    @otakustay 如果 Oracle Java 和 OpenJDK Java 因为特性有区别算是两种语言的话,我个人觉得说 Node.js 是一种语言也算勉强成立,毕竟 Node.js ECMA Script 和 Babel ECMA Script 虽说都是 ECMA Script 的实现但多多少少还是有些区别的。
    whypool
        10
    whypool  
       Nov 1, 2017
    难点在异常捕获,由于是异步回调,如果出异常简单暴力就是 process.exit(1),所以直接就挂了
    my3157
        11
    my3157  
       Nov 1, 2017
    nginx + pm2
    iceheart
        12
    iceheart  
       Nov 1, 2017 via Android
    还没开始选型的话,就别选 nodejs 了.
    server 端推荐 golang.
    做过简单测试,同样功能的程序,go 语言的内存占用大概是 node 的 1/3,处理并发数要比 node 高得多。
    并且,代码逻辑也比 node 清晰,部署维护也比 node 简单。
    S23VqeW93WZLlm6s
        13
    S23VqeW93WZLlm6s  
       Nov 1, 2017 via iPhone
    @iceheart
    可惜社区和第三方库是硬伤
    learnshare
        14
    learnshare  
       Nov 1, 2017
    Node.js 应该算是 JavaScript 运行环境吧
    wxt
        15
    wxt  
       Nov 1, 2017 via Android
    坑多,一个合作伙伴整个前端模块化,好几十个 node 应用部署在一台机器上,出了问题,他们每次都要找研发。
    wwdyy
        16
    wwdyy  
       Nov 1, 2017
    node 不是语言,谢谢
    shuangguanQuail
        17
    shuangguanQuail  
       Nov 1, 2017
    process.on('uncaughtException'),相当于一个全局的异常捕获器,保证你的程序不挂掉。
    a251922581
        18
    a251922581  
    OP
       Nov 1, 2017
    @iceheart golang 是不是相对和 C 语言接近一点?学起来比 nodejs 要难一些吧..
    isbase
        19
    isbase  
    PRO
       Nov 1, 2017
    先定义好一个兜底的错误处理中间件,将捕获到的错误传给它
    iceheart
        20
    iceheart  
       Nov 1, 2017 via Android
    @a251922581 golang 很容易上手,比 c 还简单,网上看两天文档就差不多能开搞了。官方的基础库也够用,go 的协程很方便。
    bramblex
        21
    bramblex  
       Nov 1, 2017
    @iceheart

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

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