美文网首页
node pm2(cluster) + socket.io实现后

node pm2(cluster) + socket.io实现后

作者: BillM | 来源:发表于2019-12-02 15:50 被阅读0次

    node比较流行的一种部署方式:pm2的cluster方式实现轻量集群部署,一份代码多点部署,这样在集成socket.io推送消息的时候会有一个问题:前端是随机与culster实例建立链接的,这个实例与后端产生消息的实例可能不是同一个,上图看一下:

    图1

    如图1,当实例4产生通知消息时,是无法将消息实时推送给客户端的,因为此时只有实例2与客户端建立了sokcet链接,那么如何解决这个问题呢;

    参考socket.io搭配pm2(cluster)集群解决方案(最后有建议的集中方案)

    简单说一下上文中的几种方案:

    1、官方(sokcet.io)实现:

        关键字:nginx反向代理+iphash,简单说就是将每一个实例都单独部署,端口不一,搭配nginx的iphash的转发方式确保每一个客户端建立链接的服务端和生成消息的服务端是同一个(突然想到,如果某个实例跑了定时任务产生的消息,此种方式还是不支持)

    2、上帝进程

        关键字:启动实例时将实例划分为主进程和其他进程,主进程负责做请求的定向分发,确保每一个客户端建立链接的服务端和生成消息的服务端是同一个;

    总之,确保每一个客户端建立链接的服务端和生成消息的服务端是同一个是重点;

    3、我的方法

    将消息服务模块独立,单实例启动,负责socket通信,应用app服务与消息模块采用接口通信,客户端与消息服务模块建立链接。通知消息从消息服务中获取,如下图

    图2

    图2展示了获取消息的方式,要注意的是只是消息服务是这种流程,应用服务还是客户端与应用app服务的每个实例通信获取服务数据。有条件的可以采用成熟的消息中间件;

    看到这获取有人会问,那么应用app的每个实例产生的消息是如何与消息服务模块通信的?刚才已经说了,用接口。好了,大概就是这样,有不懂的可以留言,看到会尽快回复。

    相关文章

      网友评论

          本文标题:node pm2(cluster) + socket.io实现后

          本文链接:https://www.haomeiwen.com/subject/whzxgctx.html