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

2017-11-01 10:23:09 +08:00
 a251922581
用过一些开源的 nodejs 项目,Web 服务类的,运行中途抛出了一个未捕获的错误,然后就报错退出了。。这样 Web 服务就挂掉了。。这是作者没处理好错误捕获的原因吗?
谢过几段全程 try catch 的代码,但测试时还是出现了未捕获错误,记得是跟 socket 相关的,ECONNREFUSED 和 Socket Hangup
另:用 Nginx 反代 Web 类 nodejs 程序的端口有什么好处?
谢过。。
5099 次点击
所在节点    程序员
28 条回复
mooncakejs
2017-11-01 10:33:15 +08:00
pm-docker, 捕获未捕获的异常可以用 socket.on('error'),也可以在 process.on()
反代 nodejs 除了包一层 https,静态文件,负载均衡, 没啥好处
janxin
2017-11-01 10:50:30 +08:00
参考其他语言方案即可
hronro
2017-11-01 10:51:43 +08:00
可以用 pm2
pigzilla
2017-11-01 11:01:34 +08:00
try catch 只能捕获同步代码部分的问题,异步代码要按异步的风格处理,比如 on('error')之类的,或者 promose 的.catch()。
chairuosen
2017-11-01 11:03:52 +08:00
pm2
youxiachai
2017-11-01 11:41:35 +08:00
反代..可以跑好几个不同端口的 nodejs 程序啊...
otakustay
2017-11-01 12:07:02 +08:00
终于,nodejs 成了语言
libook
2017-11-01 12:08:08 +08:00
公司使用 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
2017-11-01 12:12:02 +08:00
@otakustay 如果 Oracle Java 和 OpenJDK Java 因为特性有区别算是两种语言的话,我个人觉得说 Node.js 是一种语言也算勉强成立,毕竟 Node.js ECMA Script 和 Babel ECMA Script 虽说都是 ECMA Script 的实现但多多少少还是有些区别的。
whypool
2017-11-01 12:21:07 +08:00
难点在异常捕获,由于是异步回调,如果出异常简单暴力就是 process.exit(1),所以直接就挂了
my3157
2017-11-01 12:24:36 +08:00
nginx + pm2
iceheart
2017-11-01 12:55:34 +08:00
还没开始选型的话,就别选 nodejs 了.
server 端推荐 golang.
做过简单测试,同样功能的程序,go 语言的内存占用大概是 node 的 1/3,处理并发数要比 node 高得多。
并且,代码逻辑也比 node 清晰,部署维护也比 node 简单。
WittBulter
2017-11-01 13:00:12 +08:00
@iceheart
可惜社区和第三方库是硬伤
learnshare
2017-11-01 13:01:37 +08:00
Node.js 应该算是 JavaScript 运行环境吧
wxt
2017-11-01 13:10:07 +08:00
坑多,一个合作伙伴整个前端模块化,好几十个 node 应用部署在一台机器上,出了问题,他们每次都要找研发。
wwdyy
2017-11-01 13:11:58 +08:00
node 不是语言,谢谢
shuangguanQuail
2017-11-01 14:09:17 +08:00
process.on('uncaughtException'),相当于一个全局的异常捕获器,保证你的程序不挂掉。
a251922581
2017-11-01 15:11:24 +08:00
@iceheart golang 是不是相对和 C 语言接近一点?学起来比 nodejs 要难一些吧..
isbase
2017-11-01 16:28:02 +08:00
先定义好一个兜底的错误处理中间件,将捕获到的错误传给它
iceheart
2017-11-01 18:41:39 +08:00
@a251922581 golang 很容易上手,比 c 还简单,网上看两天文档就差不多能开搞了。官方的基础库也够用,go 的协程很方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX