最近在研究网易出的pomelo。平台是win10.版本是8.11.3 启动框架,什么也不做,随机过几分钟会打印某个服务器心跳超时,然后会断开其中一台服务器。
仔细跟了下,发现log如下: [2018-12-06 19:11:38.796] [INFO] console - timer master-server-1 update lastPing time: 1544094698796 [2018-12-06 19:11:38.793] [INFO] console - timer master-server-1 update lastPong time: 1544094698793
其中lastPing是发送心跳,lastPong是接受心跳。问题就出在最后的时间戳上。 可见第一个发送心跳的时间戳反而比接受更晚。最前面的时间是console.log()自己写的也会有这个问题。但是log的写入顺序是正常的,因此不像是异步的问题。 感觉win下node在通过Date.now()获取当前时间时有bug,因此导致后面比较时间戳时出现了问题关掉socket。 我用new Date().valueOf()或者其他方法。都会有这个问题,并且最新的10.x.x也有。
最最最重要的是,这个问题在linux上不会出现,无论挂多久都不会。。。
说实话不敢相信获取系统时间这么常用的功能,node怎么会都有问题。 请大神看看。