当前位置: 首页 > news >正文

南博网站建设福建省 园区网互联及网站建设 网络部分题目

南博网站建设,福建省 园区网互联及网站建设 网络部分题目,卧室室内装修设计网站,圣宠宠物网站建设被吐嘈的NodeJS的异常处理 许多人都有这样一种映像#xff0c;NodeJS比较快#xff1b; 但是因为其是单线程#xff0c;所以它不稳定#xff0c;有点不安全#xff0c;不适合处理复杂业务#xff1b; 它比较适合对并发要求比较高#xff0c;而且简单的业务场景。 在Expr…  被吐嘈的NodeJS的异常处理 许多人都有这样一种映像NodeJS比较快 但是因为其是单线程所以它不稳定有点不安全不适合处理复杂业务 它比较适合对并发要求比较高而且简单的业务场景。 在Express的作者的TJ Holowaychuk的 告别Node.js一文中列举了以下罪状 Farewell NodeJS (TJ Holowaychuk) •   you may get duplicate callbacks •   you may not get a callback at all (lost in limbo) •   you may get out-of-band errors •   emitters may get multiple “error” events •   missing “error” events sends everything to hell •   often unsure what requires “error” handlers •   “error” handlers are very verbose •   callbacks suck 其实这几条主要吐嘈了两点 node.js错误处理很扯蛋node.js的回调也很扯蛋。  事实上呢 事实上NodeJS里程确实有“脆弱”的一面单线程的某处产生了“未处理的”异常确实会导致整个Node.JS的崩溃退出来看个例子, 这里有一个node-error.js的文件  var http require(http);var server http.createServer(function (req, res) { //这里有个错误params 是 undefined var ok req.params.ok; res.writeHead(200, {Content-Type: text/plain}); res.end(Hello World\n); }); server.listen(8080, 127.0.0.1); console.log(Server running at http://127.0.0.1:8080/); 启动服务并在地址栏测试一下发现 http://127.0.0.1:8080/  不出所料node崩溃了  $ node node-error Server running at http://127.0.0.1:8080/c:\github\script\node-error.js:5 var ok req.params.ok; ^ TypeError: Cannot read property ok of undefined at Server.anonymous (c:\github\script\node-error.js:5:22) at Server.EventEmitter.emit (events.js:98:17) at HTTPParser.parser.onIncoming (http.js:2108:12) at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23) at Socket.socket.ondata (http.js:1966:22) at TCP.onread (net.js:525:27) 怎么解决呢 其实Node.JS发展到今天如果连这个问题都解决不了那估计早就没人用了。  使用uncaughtException 我们可以uncaughtException来全局捕获未捕获的Error同时你还可以将此函数的调用栈打印出来捕获之后可以有效防止node进程退出如  process.on(uncaughtException, function (err) {//打印出错误console.log(err);//打印出错误的调用栈方便调试 console.log(err.stack) }); 这相当于在node进程内部进行守护 但这种方法很多人都是不提倡的说明你还不能完全掌控Node.JS的异常。  使用 try/catch 我们还可以在回调前加try/catch同样确保线程的安全。  var http require(http);http.createServer(function(req, res) { try { handler(req, res); } catch(e) { console.log(\r\n, e, \r\n, e.stack); try { res.end(e.stack); } catch(e) { } } }).listen(8080, 127.0.0.1); console.log(Server running at http://127.0.0.1:8080/); var handler function (req, res) { //Error Popuped var name req.params.name; res.writeHead(200, {Content-Type: text/plain}); res.end(Hello name); }; 这种方案的好处是可以将错误和调用栈直接输出到当前发生的网页上。  集成到框架中 标准的HTTP响应处理会经历一系列的MiddlewareHttpModule最终到达Handler如下图所示  这 些Middleware和Handler在NodeJS中都有一个特点他们都是回调函数而回调函数中是唯一会让Node在运行时崩溃的地方。根据这个 特点我们只需要在框架中集成一处try/catch就可以相对完美地解决异常问题而且不会影响其它用户的请求request。 事实上现在的NodeJS WEB框架几乎都是这么做的如 OurJS开源博客所基于的 WebSvr 就有这么一处异常处理代码  Line: 207  try {handler(req, res);} catch(err) {var errorMsg \n       Error new Date().toISOString() req.url       \n       err.stack || err.message || unknow error       \n       ;     console.error(errorMsg);     Settings.showError       ? res.end(pre errorMsg /pre)       : res.end();   } 那么不在回调中产生的错误怎么办不必担心其实这样的node程序根本就起不起来。 此外node自带的 cluster 也有一定的容错能力它跟nginx的worker很类似但消耗资源内存略大编程也不是很方便OurJS并没有采用此种设计。  守护NodeJS进程和记录错误日志 现 在已经基本上解决了Node.JS因异常而崩溃的问题不过任何平台都不是100%可靠的还有一些错误是从Node底层抛出的有些异常 try/catch和uncaughtException都无法捕获。之前在运行ourjs的时侯会偶尔碰到底层抛出的文件流读取异常这就是一个底层 libuv的BUGnode.js在0.10.21中进行了修复。 面对这种情况我们就应该为nodejs应用添加守护进程让NodeJS遭遇异常崩溃以后能马上复活。 另外还应该把这些产生的异常记录到日志中并让异常永远不再发生。  使用node来守护node node-forever 提供了守护的功能和LOG日志记录功能。 安装非常容易  [sudo] npm install forever 使用也很简单  $ forever start simple-server.js $ forever list[0] simple-server.js [ 24597, 24596 ] 还可以看日志  forever -o out.log -e err.log my-script.js   使用shell启动脚本守护node 使用node来守护的话资源开销可能会有点大而且也会略显复杂OurJS直接在开机启动脚本来进程线程守护。 如在debian中放置的 ourjs 开机启动文件 /etc/init.d/ourjs 这个文件非常简单只有启动的选项守护的核心功能是由一个无限循环 while true; 来实现的为了防止过于密集的错误阻塞进程每次错误后间隔1秒重启服务  WEB_DIR/var/www/ourjs WEB_APPsvr/ourjs.js#location of node you want to use NODE_EXE/root/local/bin/node while true; do     {         $NODE_EXE $WEB_DIR/$WEB_APP config.magazine.js         echo Stopped unexpected, restarting \r\n\r\n     } 2 $WEB_DIR/error.log     sleep 1 done   错误日志记录也非常简单直接将此进程控制台当中的错误输出到error.log文件即可 2 $WEB_DIR/error.log  这一行, 2 代表 Error。   转自 OurJS
http://www.yutouwan.com/news/224509/

相关文章:

  • 如何看还在建设的网站有模版之后怎么做网站
  • 货运代理网站模板网络设置了代理怎么关闭
  • 给人做ppt的网站吗高清图片素材网
  • 宣城网站开发专业制广州广告公司
  • 网站的seo优化方案梅州建站
  • 金坛网站建设公司服装设计与工程
  • 甘肃营销型网站建设做五金行业的外贸网站
  • 韶关营销网站开发网站建设敬请期待图片素材
  • 官方网站找oem做洗发水厂家推广app赚佣金
  • 唯美谷网站建设深圳优秀网站设计
  • 微信公众号 做不了微网站吗公司主页怎么制作
  • 防下载 的视频网站 怎么做制作网页需要的技术
  • 衡阳电商网站建设网站建设丶金手指花总13
  • 网站数据分析建设有没有做任务一样的网站兼职
  • 北京朝阳网站建设海外广告公司
  • 网站 名词解释上海注册公司哪家好
  • 重庆市建设工程造价管理总站云南哪有网站建设推广
  • 深圳商业网站建设哪家好房产信息查询系统官方网站
  • 深圳南山建设局官方网站中建八局第一建设有限公司中标
  • 医院网站建设 中企动力wordpress tag小图标
  • 重庆网站建设模板制作杭州做网站的企业
  • 做网站多少钱西宁君博领先wordpress被恶意登录
  • 网站建设基本要求加强门户网站建设宣传
  • 上海制作网站的公司什么是主机托管
  • 网站建设模板平台太平洋建设官方网站
  • 连云港网站建设的公司wordpress媒体库代码
  • wordpress更换网站简述网站的推广策略
  • 赣州网站建设公司哪家好珠海专业网站制作平台
  • 红色网站欣赏网站建设小组实训总结
  • 国际外贸网站建设现代感的传媒公司名称