skynet中cluster和harbor,进程间通信方式的分析与对比

      skynet是开源社区中一个璀璨的明星,在设计上高屋建瓴,整个核心层代码数量非常少,深度嵌入lua语言,使得开发任何网络服务端的应用,都能很快的实现,并且非常方便后续的开发和维护。这里主要就网络服务端很常见的进程间通信的场景,对skynet是如何解决的作一番剖析。

      skynet提供的cluster模块,就是用于两个进程间通信的解决方案。cluster模块主要包含clusterd.lua、cluster.lua、clustersender.lua、clusteragent.lua、lua-cluster.c,还有一些公共模块。在节点(运行中的进程)运行时,clusterd.lua作为一个服务(通过snlua(99%的服务的宿主)动态库建立),cluster.lua向外提供操作接口,最终在clusterd服务里开启对一个端口的监听,同时,当有其他的节点发起对这个节点的网络连接时,通过clusterd会建立一个clusteragent服务,skynet进程间通信的消息都是由连接方(底层调用connect)主动(不会由建立clusteragent的节点主动发起通信)发起的。对另一个节点发起通信,会通过clusterd服务建立一个clustersender服务,然后通过clustersender向另一个节点发数据。这些都是skynet框架层提供的底层支持,应用层不需要修改(之前因为不满足我们项目的一个需求,做过一点修改)。通常是在一个服务A里对另一个节点的某个服务B发送数据,数据的流向是服务A->clustersender->服务A所在节点的网络层->服务B所在节点的网络层->clusteragent->服务B,如果需要等服务B返回数据,会在服务A、clustersender服务、clusteragent服务挂起协程,等服务B处理完业

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值