如今使用nodejs作tcp方面的开发工做,使用了redis和mongodb做为基础数据的支撑,由于系统须要长期地运行,因此不肯定当中途某个数据库链接断掉以后会发生什么状况,暂时不从源代码入手吧,先手动尝试观察一下,先观察表象,再深刻理解node
通过测试,发现经过nodejs的redis客户端获取的链接在中途发生断线以后(模拟场景有手动Kill掉TCP链接和手动关闭redis-server两种状况)会进行自动重连,并且在中途进行操做,回调函数中会返回错误信息,这样的话至少代码不会爆掉,进程也不会挂,最神奇的是以前获取到的操做句柄还可以正常使用,重连发生在这个操做对象内部,对开发者是不可见,应该来讲很友好吧,最神奇的是nodejs驱动开发者考虑到了不少细节的问题,好比开始的时候客户端订阅了某个频道,在进行重连后还会初始化一次(内部机制以后看源代码以后才能下结论),看来真是省心啊。redis
mongodb的官方nodejs驱动有个很厉害的地方,当操做过程当中链接被断掉后(直接手动关闭mongodb-server),若是后续还有操做,将会被暂时存储起来,当链接被从新创建以后,全部“缓冲区”的数据将会被写入数据库,看来仍是很不错的哦,可是目前待思考的地方是若是有大量数据,“缓存区”会在什么状况下清空呢?(看来研究一下驱动颇有必要了)mongodb
他们的共同点就是第一次必须先获取操做对象,不然代码直接会爆掉的(不过这点上redis就作得比较好了,不管是否链接上客户端都返回一个操做对象,看来mongodb其实还能够改进一下),这个固然好理解,因此如今系统在最开的时候会有一个初始化阶段,负责初始化数据缓存池链接(包括redis和mongodb),接下来就不怕啦,即便是中途tcp断掉一段时间仍是能够接受的数据库
不管在使用mongo仍是redis在进行写操做的时候,都必定使用回调函数,这样才能更加保险,不然颇有可能都没有写进去,又或者是数据在重连成功前被清除掉了呢。缓存
@todo mongodb nodejs drive buffer size before connected again...tcp