随笔分类 -  nodejs

摘要:node之中连接redis使用的redis模块,虽然好用,但是有些地方还是需要注意。npm install redisredis client 行为:1、客户端执行过程中断网的情况 由于原本连接正常,断网后socket无法主动检测到,因此TCP进入不断的重传,ubuntu系统大概在1000秒左右返回ETIMEOUT。 由于redis客户端没有等待回复超时时间,所以会等待到TCP超时才最终导致超时。2、重连接机制:当服务端异常断开会导致重连接,而若是客户端主动断开则不会重连接 如下两种情况表示客户端主动断开: 1)向服务端发送quit命令 2)调用客户端类的end... 阅读全文
posted @ 2014-03-15 09:47 chang290 阅读(3920) 评论(0) 推荐(0)
摘要:问题:线上的写日志操作非常频繁,想统计每秒写了多少行数据?假如没法送一个消息写一个日志,问题也就变成了,每秒发送多少消息了。日志采用log4js书写,格式如下:[2014-03-10 11:23:33.548] [INFO] lac -[2014-03-10 11:23:33.551] [INFO] lac - [2014-03-10 11:23:33.563] [INFO] lac - [2014-03-10 11:23:33.569] [INFO] lac - [2014-03-10 11:23:33.572] [INFO] lac - 思路:依次读取日志的每一行,解析出时间字段,如11: 阅读全文
posted @ 2014-03-10 16:34 chang290 阅读(1169) 评论(0) 推荐(0)
摘要:问题一、nodejs既然是单线程运行,在连接数据库时为何要使用连接池呢? 问题二,redis服务端是单线程运行的,使用连接池到redis,服务端还是串行处理,有什么意义么? 这两个问题都涉及到单线程与连接池,仔细想像这两个问题其实回答是一样的: 关键点是:网络传输消耗时间 一次查询会有三个过程:发送查询报文,服务端执行查询操作,收取回复报文。 在大部分情况下,有理由相信服务端执行时间很短,而大部分时间消耗在了网络传输上。 1)对于那些在一个连接上只能发送一个查询请求的客户端,使用连接池就可以在同样的时间内发送多个连接请求,从而更有效的使用服务器的资源。 2)而... 阅读全文
posted @ 2013-11-22 15:15 chang290 阅读(3540) 评论(0) 推荐(0)
摘要:一、没有添加对uncaughtException异常的捕捉处理,最起码也要在其中写个日志记录错误,然后可以调用process.exit(1); 退出进程。二、处理函数的回调函数检查,经常忘记在回调函数前添加 return,导致调用了回调函数后,继续执行后面的代码。三、在循环中使用闭包,待续。。。 阅读全文
posted @ 2013-08-17 19:04 chang290 阅读(450) 评论(0) 推荐(0)
摘要:1、推荐一本很不错的介绍书,很短,但是可以一窥nodejs写http服务器的方式 http://www.nodebeginner.org/index-zh-cn.html2、cluster实现模式 由于node是单进程单线程的方式运行,因此若想发挥多核的优势需要使用进程组的方式进行。 node之中提供了cluster模块用于实现多进程之间的通讯,进程分成一个主进程与多个从进程。 对于HTTP服务器,通过child_process.fork进行创建工作进程,因此可以在主从进程之间进行通讯。 当在从进程调用server.listen时,会将listen的参数序列化后传递给主进程,主进程判... 阅读全文
posted @ 2013-02-26 17:45 chang290 阅读(319) 评论(0) 推荐(0)