nodejs有个问题一直困扰着我,nodejs如何做到无伤更新?也就是说如果有一个版本需要更新,那么是需要重启的,对于web来说还好,但是对于游戏来说就麻烦了,要维护着长连接,如果重启,肯定是不行的,求个解决方案?
10 回复
- 做个代理, 并对请求设置对应的权重,如:proxy = s1(60%) + s2(40%);
- 有更新时,降低 s2 的权重(降低为0则关闭连接请求)。新的请求会到 s1 上
- s2 上已有的连接你不想丢失,只能等待所有连接正常断开
- 当 s2 上无活动连接时,可以进行更新
- 更新完成后,恢复对应的权重
@networkwx 可以寨一下erlang的解决方案, 没跨节点的actor就拿redis或者0mq的pubsub凑, 把handles单独抽出来, 哪部分需要更新就推送出去, 订阅者收到后eval替换掉现有的handle. 这样颗粒相对细一点吧.